mirror of
https://github.com/golang/go
synced 2024-11-22 02:24:41 -07:00
parent
f930d28164
commit
fa4da33315
@ -715,10 +715,20 @@ gmove(Node *f, Node *t)
|
|||||||
* float to integer
|
* float to integer
|
||||||
*/
|
*/
|
||||||
case CASE(TFLOAT32, TINT8):
|
case CASE(TFLOAT32, TINT8):
|
||||||
case CASE(TFLOAT32, TINT16):
|
|
||||||
case CASE(TFLOAT32, TINT32):
|
|
||||||
case CASE(TFLOAT32, TUINT8):
|
case CASE(TFLOAT32, TUINT8):
|
||||||
|
fa = AMOVF;
|
||||||
|
a = AMOVFW;
|
||||||
|
ta = AMOVB;
|
||||||
|
goto fltconv;
|
||||||
|
|
||||||
|
case CASE(TFLOAT32, TINT16):
|
||||||
case CASE(TFLOAT32, TUINT16):
|
case CASE(TFLOAT32, TUINT16):
|
||||||
|
fa = AMOVF;
|
||||||
|
a = AMOVFW;
|
||||||
|
ta = AMOVH;
|
||||||
|
goto fltconv;
|
||||||
|
|
||||||
|
case CASE(TFLOAT32, TINT32):
|
||||||
case CASE(TFLOAT32, TUINT32):
|
case CASE(TFLOAT32, TUINT32):
|
||||||
fa = AMOVF;
|
fa = AMOVF;
|
||||||
a = AMOVFW;
|
a = AMOVFW;
|
||||||
@ -726,10 +736,20 @@ gmove(Node *f, Node *t)
|
|||||||
goto fltconv;
|
goto fltconv;
|
||||||
|
|
||||||
case CASE(TFLOAT64, TINT8):
|
case CASE(TFLOAT64, TINT8):
|
||||||
case CASE(TFLOAT64, TINT16):
|
|
||||||
case CASE(TFLOAT64, TINT32):
|
|
||||||
case CASE(TFLOAT64, TUINT8):
|
case CASE(TFLOAT64, TUINT8):
|
||||||
|
fa = AMOVD;
|
||||||
|
a = AMOVDW;
|
||||||
|
ta = AMOVB;
|
||||||
|
goto fltconv;
|
||||||
|
|
||||||
|
case CASE(TFLOAT64, TINT16):
|
||||||
case CASE(TFLOAT64, TUINT16):
|
case CASE(TFLOAT64, TUINT16):
|
||||||
|
fa = AMOVD;
|
||||||
|
a = AMOVDW;
|
||||||
|
ta = AMOVH;
|
||||||
|
goto fltconv;
|
||||||
|
|
||||||
|
case CASE(TFLOAT64, TINT32):
|
||||||
case CASE(TFLOAT64, TUINT32):
|
case CASE(TFLOAT64, TUINT32):
|
||||||
fa = AMOVD;
|
fa = AMOVD;
|
||||||
a = AMOVDW;
|
a = AMOVDW;
|
||||||
@ -745,10 +765,20 @@ gmove(Node *f, Node *t)
|
|||||||
* integer to float
|
* integer to float
|
||||||
*/
|
*/
|
||||||
case CASE(TINT8, TFLOAT32):
|
case CASE(TINT8, TFLOAT32):
|
||||||
case CASE(TINT16, TFLOAT32):
|
|
||||||
case CASE(TINT32, TFLOAT32):
|
|
||||||
case CASE(TUINT8, TFLOAT32):
|
case CASE(TUINT8, TFLOAT32):
|
||||||
|
fa = AMOVB;
|
||||||
|
a = AMOVWF;
|
||||||
|
ta = AMOVF;
|
||||||
|
goto fltconv;
|
||||||
|
|
||||||
|
case CASE(TINT16, TFLOAT32):
|
||||||
case CASE(TUINT16, TFLOAT32):
|
case CASE(TUINT16, TFLOAT32):
|
||||||
|
fa = AMOVH;
|
||||||
|
a = AMOVWF;
|
||||||
|
ta = AMOVF;
|
||||||
|
goto fltconv;
|
||||||
|
|
||||||
|
case CASE(TINT32, TFLOAT32):
|
||||||
case CASE(TUINT32, TFLOAT32):
|
case CASE(TUINT32, TFLOAT32):
|
||||||
fa = AMOVW;
|
fa = AMOVW;
|
||||||
a = AMOVWF;
|
a = AMOVWF;
|
||||||
@ -756,10 +786,20 @@ gmove(Node *f, Node *t)
|
|||||||
goto fltconv;
|
goto fltconv;
|
||||||
|
|
||||||
case CASE(TINT8, TFLOAT64):
|
case CASE(TINT8, TFLOAT64):
|
||||||
case CASE(TINT16, TFLOAT64):
|
|
||||||
case CASE(TINT32, TFLOAT64):
|
|
||||||
case CASE(TUINT8, TFLOAT64):
|
case CASE(TUINT8, TFLOAT64):
|
||||||
|
fa = AMOVB;
|
||||||
|
a = AMOVWD;
|
||||||
|
ta = AMOVD;
|
||||||
|
goto fltconv;
|
||||||
|
|
||||||
|
case CASE(TINT16, TFLOAT64):
|
||||||
case CASE(TUINT16, TFLOAT64):
|
case CASE(TUINT16, TFLOAT64):
|
||||||
|
fa = AMOVH;
|
||||||
|
a = AMOVWD;
|
||||||
|
ta = AMOVD;
|
||||||
|
goto fltconv;
|
||||||
|
|
||||||
|
case CASE(TINT32, TFLOAT64):
|
||||||
case CASE(TUINT32, TFLOAT64):
|
case CASE(TUINT32, TFLOAT64):
|
||||||
fa = AMOVW;
|
fa = AMOVW;
|
||||||
a = AMOVWD;
|
a = AMOVWD;
|
||||||
|
@ -19,15 +19,19 @@ static uint32 doabort = 0;
|
|||||||
static uint32 trace = 0;
|
static uint32 trace = 0;
|
||||||
|
|
||||||
#define DOUBLE_EXPBIAS 1023
|
#define DOUBLE_EXPBIAS 1023
|
||||||
#define DOUBLE_MANT_MASK 0xfffffffffffffll
|
#define DOUBLE_MANT_MASK 0xfffffffffffffull
|
||||||
#define DOUBLE_MANT_TOP_BIT 0x10000000000000ll
|
#define DOUBLE_MANT_TOP_BIT 0x10000000000000ull
|
||||||
#define DZERO 0x0000000000000000ll
|
#define DZERO 0x0000000000000000ull
|
||||||
#define DNZERO 0x8000000000000000ll
|
#define DNZERO 0x8000000000000000ull
|
||||||
#define DONE 0x3ff0000000000000ll
|
#define DONE 0x3ff0000000000000ull
|
||||||
#define DINF 0x7ff0000000000000ll
|
#define DINF 0x7ff0000000000000ull
|
||||||
#define DNINF 0xfff0000000000000ll
|
#define DNINF 0xfff0000000000000ull
|
||||||
|
#define DNAN 0x7FF0000000000001ull
|
||||||
|
|
||||||
#define SINGLE_EXPBIAS 127
|
#define SINGLE_EXPBIAS 127
|
||||||
|
#define FINF 0x7f800000ul
|
||||||
|
#define FNINF 0xff800000ul
|
||||||
|
#define FNAN 0x7f800000ul
|
||||||
|
|
||||||
|
|
||||||
static const int8* opnames[] = {
|
static const int8* opnames[] = {
|
||||||
@ -141,6 +145,14 @@ fprint(void)
|
|||||||
static uint32
|
static uint32
|
||||||
d2s(uint64 d)
|
d2s(uint64 d)
|
||||||
{
|
{
|
||||||
|
if ((d & ~(1ull << 63)) == 0)
|
||||||
|
return (uint32)(d>>32);
|
||||||
|
if (d == DINF)
|
||||||
|
return FINF;
|
||||||
|
if (d == DNINF)
|
||||||
|
return FNINF;
|
||||||
|
if ((d & ~(1ull << 63)) == DNAN)
|
||||||
|
return FNAN;
|
||||||
return (d>>32 & 0x80000000) | //sign
|
return (d>>32 & 0x80000000) | //sign
|
||||||
((uint32)(fexp(d) + SINGLE_EXPBIAS) & 0xff) << 23 | // exponent
|
((uint32)(fexp(d) + SINGLE_EXPBIAS) & 0xff) << 23 | // exponent
|
||||||
(d >> 29 & 0x7fffff); // mantissa
|
(d >> 29 & 0x7fffff); // mantissa
|
||||||
@ -149,6 +161,14 @@ d2s(uint64 d)
|
|||||||
static uint64
|
static uint64
|
||||||
s2d(uint32 s)
|
s2d(uint32 s)
|
||||||
{
|
{
|
||||||
|
if ((s & ~(1ul << 31)) == 0)
|
||||||
|
return (uint64)(s) << 32;
|
||||||
|
if (s == FINF)
|
||||||
|
return DINF;
|
||||||
|
if (s == FNINF)
|
||||||
|
return DNINF;
|
||||||
|
if ((s & ~(1ul << 31)) == FNAN)
|
||||||
|
return DNAN;
|
||||||
return (uint64)(s & 0x80000000) << 63 | // sign
|
return (uint64)(s & 0x80000000) << 63 | // sign
|
||||||
(uint64)((s >> 23 &0xff) + (DOUBLE_EXPBIAS - SINGLE_EXPBIAS)) << 52 | // exponent
|
(uint64)((s >> 23 &0xff) + (DOUBLE_EXPBIAS - SINGLE_EXPBIAS)) << 52 | // exponent
|
||||||
(uint64)(s & 0x7fffff) << 29; // mantissa
|
(uint64)(s & 0x7fffff) << 29; // mantissa
|
||||||
@ -199,6 +219,10 @@ dataprocess(uint32* pc)
|
|||||||
} else {
|
} else {
|
||||||
fraw0 = m->freg[lhs];
|
fraw0 = m->freg[lhs];
|
||||||
fraw1 = frhs(rhs);
|
fraw1 = frhs(rhs);
|
||||||
|
if (isNaN(float64frombits(fraw0)) || isNaN(float64frombits(fraw1))) {
|
||||||
|
m->freg[dest] = DNAN;
|
||||||
|
goto ret;
|
||||||
|
}
|
||||||
switch (opcode) {
|
switch (opcode) {
|
||||||
case 2: // suf
|
case 2: // suf
|
||||||
fraw1 ^= 0x1ll << 63;
|
fraw1 ^= 0x1ll << 63;
|
||||||
@ -236,6 +260,10 @@ dataprocess(uint32* pc)
|
|||||||
if (0x1ll<<expd & fsd)
|
if (0x1ll<<expd & fsd)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (expd - 52 < 0)
|
||||||
|
fsd <<= -(expd - 52);
|
||||||
|
else
|
||||||
|
fsd >>= expd - 52;
|
||||||
if (exp0 > exp1)
|
if (exp0 > exp1)
|
||||||
exp = expd + exp0 - 52;
|
exp = expd + exp0 - 52;
|
||||||
else
|
else
|
||||||
@ -255,6 +283,15 @@ dataprocess(uint32* pc)
|
|||||||
goto ret;
|
goto ret;
|
||||||
|
|
||||||
case 4: //dvf
|
case 4: //dvf
|
||||||
|
if ((fraw1 & ~(1ull<<63)) == 0) {
|
||||||
|
if ((fraw0 & ~(1ull<<63)) == 0) {
|
||||||
|
m->freg[dest] = DNAN;
|
||||||
|
} else {
|
||||||
|
sign = fraw0 & 1ull<<63 ^ fraw1 & 1ull<<63;
|
||||||
|
m->freg[dest] = sign | DINF;
|
||||||
|
}
|
||||||
|
goto ret;
|
||||||
|
}
|
||||||
// reciprocal for fraw1
|
// reciprocal for fraw1
|
||||||
if (fraw1 == DONE)
|
if (fraw1 == DONE)
|
||||||
goto muf;
|
goto muf;
|
||||||
@ -558,7 +595,7 @@ stepflt(uint32 *pc, uint32 *regs)
|
|||||||
if (i & 0x00800000) {
|
if (i & 0x00800000) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return i & 0x007ffffff + 2;
|
return (i & 0x007fffff) + 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
c = i >> 25 & 7;
|
c = i >> 25 & 7;
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
./cmp4.go
|
./cmp4.go
|
||||||
./cmp5.go
|
./cmp5.go
|
||||||
./cmplx.go
|
./cmplx.go
|
||||||
# ./cmplxdivide.go # fail
|
# ./cmplxdivide.go # fail, BUG
|
||||||
./cmplxdivide1.go
|
./cmplxdivide1.go
|
||||||
./complit.go
|
./complit.go
|
||||||
./compos.go
|
./compos.go
|
||||||
@ -42,8 +42,8 @@
|
|||||||
./empty.go
|
./empty.go
|
||||||
./env.go
|
./env.go
|
||||||
./escape.go
|
./escape.go
|
||||||
# ./float_lit.go # fail
|
./float_lit.go
|
||||||
# ./floatcmp.go # fail
|
# ./floatcmp.go # fail, BUG
|
||||||
./for.go
|
./for.go
|
||||||
./func.go
|
./func.go
|
||||||
./func1.go
|
./func1.go
|
||||||
@ -65,13 +65,13 @@
|
|||||||
./indirect.go
|
./indirect.go
|
||||||
./indirect1.go
|
./indirect1.go
|
||||||
./initcomma.go
|
./initcomma.go
|
||||||
# ./initialize.go # fail
|
# ./initialize.go # fail, BUG
|
||||||
./initializerr.go
|
./initializerr.go
|
||||||
./initsyscall.go
|
./initsyscall.go
|
||||||
./int_lit.go
|
./int_lit.go
|
||||||
./intcvt.go
|
./intcvt.go
|
||||||
./iota.go
|
./iota.go
|
||||||
# ./literal.go # fail
|
./literal.go
|
||||||
./malloc1.go
|
./malloc1.go
|
||||||
# ./mallocfin.go # fail
|
# ./mallocfin.go # fail
|
||||||
./mallocrand.go
|
./mallocrand.go
|
||||||
@ -82,14 +82,14 @@
|
|||||||
./method1.go
|
./method1.go
|
||||||
./method2.go
|
./method2.go
|
||||||
./method3.go
|
./method3.go
|
||||||
# ./named.go # fail
|
./named.go
|
||||||
./named1.go
|
./named1.go
|
||||||
./nil.go
|
./nil.go
|
||||||
./nul1.go
|
./nul1.go
|
||||||
./parentype.go
|
./parentype.go
|
||||||
./peano.go
|
./peano.go
|
||||||
./printbig.go
|
./printbig.go
|
||||||
# ./range.go # fail
|
./range.go
|
||||||
./recover.go
|
./recover.go
|
||||||
./recover1.go
|
./recover1.go
|
||||||
./recover2.go
|
./recover2.go
|
||||||
@ -106,7 +106,6 @@
|
|||||||
./stringrange.go
|
./stringrange.go
|
||||||
./switch.go
|
./switch.go
|
||||||
./switch1.go
|
./switch1.go
|
||||||
./test.go
|
|
||||||
./test0.go
|
./test0.go
|
||||||
./turing.go
|
./turing.go
|
||||||
./typeswitch.go
|
./typeswitch.go
|
||||||
@ -117,7 +116,7 @@
|
|||||||
./varerr.go
|
./varerr.go
|
||||||
./varinit.go
|
./varinit.go
|
||||||
./vectors.go
|
./vectors.go
|
||||||
# ./zerodivide.go # fail
|
./zerodivide.go
|
||||||
ken/array.go
|
ken/array.go
|
||||||
ken/chan.go
|
ken/chan.go
|
||||||
ken/chan1.go
|
ken/chan1.go
|
||||||
@ -126,7 +125,7 @@ ken/cplx0.go
|
|||||||
# ken/cplx1.go # fail
|
# ken/cplx1.go # fail
|
||||||
# ken/cplx2.go # fail
|
# ken/cplx2.go # fail
|
||||||
ken/cplx3.go
|
ken/cplx3.go
|
||||||
# ken/cplx4.go # fail
|
# ken/cplx4.go # fail, BUG
|
||||||
ken/cplx5.go
|
ken/cplx5.go
|
||||||
ken/divconst.go
|
ken/divconst.go
|
||||||
ken/divmod.go
|
ken/divmod.go
|
||||||
@ -148,9 +147,9 @@ ken/robfor.go
|
|||||||
ken/robfunc.go
|
ken/robfunc.go
|
||||||
ken/robif.go
|
ken/robif.go
|
||||||
ken/shift.go
|
ken/shift.go
|
||||||
# ken/simparray.go # fail
|
ken/simparray.go
|
||||||
ken/simpbool.go
|
ken/simpbool.go
|
||||||
# ken/simpconv.go # fail
|
ken/simpconv.go
|
||||||
ken/simpfun.go
|
ken/simpfun.go
|
||||||
ken/simpprint.go
|
ken/simpprint.go
|
||||||
ken/simpswitch.go
|
ken/simpswitch.go
|
||||||
@ -168,6 +167,7 @@ chan/powser1.go
|
|||||||
chan/powser2.go
|
chan/powser2.go
|
||||||
chan/select.go
|
chan/select.go
|
||||||
chan/select2.go
|
chan/select2.go
|
||||||
|
# chan/select3.go # fail
|
||||||
chan/sieve1.go
|
chan/sieve1.go
|
||||||
chan/sieve2.go
|
chan/sieve2.go
|
||||||
interface/bigdata.go
|
interface/bigdata.go
|
||||||
@ -460,6 +460,7 @@ fixedbugs/bug270.go
|
|||||||
fixedbugs/bug271.go
|
fixedbugs/bug271.go
|
||||||
# fixedbugs/bug272.go # fail
|
# fixedbugs/bug272.go # fail
|
||||||
fixedbugs/bug273.go
|
fixedbugs/bug273.go
|
||||||
|
fixedbugs/bug274.go
|
||||||
fixedbugs/bug275.go
|
fixedbugs/bug275.go
|
||||||
fixedbugs/bug276.go
|
fixedbugs/bug276.go
|
||||||
fixedbugs/bug277.go
|
fixedbugs/bug277.go
|
||||||
@ -471,8 +472,17 @@ fixedbugs/bug282.go
|
|||||||
fixedbugs/bug283.go
|
fixedbugs/bug283.go
|
||||||
fixedbugs/bug284.go
|
fixedbugs/bug284.go
|
||||||
fixedbugs/bug285.go
|
fixedbugs/bug285.go
|
||||||
|
fixedbugs/bug286.go
|
||||||
fixedbugs/bug287.go
|
fixedbugs/bug287.go
|
||||||
fixedbugs/bug288.go
|
fixedbugs/bug288.go
|
||||||
|
fixedbugs/bug289.go
|
||||||
|
fixedbugs/bug290.go
|
||||||
|
fixedbugs/bug291.go
|
||||||
|
fixedbugs/bug292.go
|
||||||
|
fixedbugs/bug293.go
|
||||||
|
fixedbugs/bug294.go
|
||||||
|
fixedbugs/bug295.go
|
||||||
|
fixedbugs/bug296.go
|
||||||
|
fixedbugs/bug297.go
|
||||||
|
fixedbugs/bug298.go
|
||||||
# bugs/bug260.go # fail, BUG
|
# bugs/bug260.go # fail, BUG
|
||||||
# bugs/bug274.go # fail, BUG
|
|
||||||
# bugs/bug286.go # fail, BUG
|
|
||||||
|
@ -21,7 +21,7 @@ panic PC=xxx
|
|||||||
|
|
||||||
=========== ./deferprint.go
|
=========== ./deferprint.go
|
||||||
printing: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
printing: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
||||||
42 true false true +1.755561e+000 world 0x0 [0/0]0x0 0x0 0x0 255
|
42 true false true +1.500000e+000 world 0x0 [0/0]0x0 0x0 0x0 255
|
||||||
|
|
||||||
=========== ./helloworld.go
|
=========== ./helloworld.go
|
||||||
hello, world
|
hello, world
|
||||||
@ -51,25 +51,49 @@ FAIL
|
|||||||
=========== ./turing.go
|
=========== ./turing.go
|
||||||
Hello World!
|
Hello World!
|
||||||
|
|
||||||
|
=========== ./zerodivide.go
|
||||||
|
int 0/0: expected "divide"; got no error
|
||||||
|
int8 0/0: expected "divide"; got no error
|
||||||
|
int16 0/0: expected "divide"; got no error
|
||||||
|
int32 0/0: expected "divide"; got no error
|
||||||
|
int64 0/0: expected "divide"; got no error
|
||||||
|
int 1/0: expected "divide"; got no error
|
||||||
|
int8 1/0: expected "divide"; got no error
|
||||||
|
int16 1/0: expected "divide"; got no error
|
||||||
|
int32 1/0: expected "divide"; got no error
|
||||||
|
int64 1/0: expected "divide"; got no error
|
||||||
|
uint 0/0: expected "divide"; got no error
|
||||||
|
uint8 0/0: expected "divide"; got no error
|
||||||
|
uint16 0/0: expected "divide"; got no error
|
||||||
|
uint32 0/0: expected "divide"; got no error
|
||||||
|
uint64 0/0: expected "divide"; got no error
|
||||||
|
uintptr 0/0: expected "divide"; got no error
|
||||||
|
uint 1/0: expected "divide"; got no error
|
||||||
|
uint8 1/0: expected "divide"; got no error
|
||||||
|
uint16 1/0: expected "divide"; got no error
|
||||||
|
uint32 1/0: expected "divide"; got no error
|
||||||
|
uint64 1/0: expected "divide"; got no error
|
||||||
|
uintptr 1/0: expected "divide"; got no error
|
||||||
|
|
||||||
=========== ken/cplx0.go
|
=========== ken/cplx0.go
|
||||||
(+1.066132e-308+1.313303e-308i)
|
(+1.112538e-308+1.278303e-308i)
|
||||||
(+1.066132e-308+1.066132e-308i)
|
(+1.112538e-308+1.112538e-308i)
|
||||||
(+1.066132e-308+1.313303e-308i)
|
(+1.112538e-308+1.278303e-308i)
|
||||||
(+1.066132e-308+1.066132e-308i)
|
(+1.112538e-308+1.112538e-308i)
|
||||||
|
|
||||||
=========== ken/cplx3.go
|
=========== ken/cplx3.go
|
||||||
(+1.362661e-308+2.270313e+000i)
|
(+1.436040e-308+2.250626e+000i)
|
||||||
(+1.362661e-308+2.270313e+000i)
|
(+1.436040e-308+2.250626e+000i)
|
||||||
64
|
64
|
||||||
|
|
||||||
=========== ken/cplx5.go
|
=========== ken/cplx5.go
|
||||||
(+0.000000e+000+0.000000e+000i)
|
(+0.000000e+000+0.000000e+000i)
|
||||||
(+1.066132e-308+1.066132e-308i)
|
(+1.112550e-308+1.112550e-308i)
|
||||||
(+1.066132e-308+2.272661e+000i)
|
(+1.112537e-308+2.382812e+000i)
|
||||||
(+2.270313e+000+2.272661e+000i)
|
(+2.250015e+000+2.382812e+000i)
|
||||||
(+2.270313e+000+2.272661e+000i)
|
(+2.250015e+000+2.382812e+000i)
|
||||||
(+1.313272e-308+0.000000e+000i)
|
(+1.251430e-308+0.000000e+000i)
|
||||||
(+1.313272e-308+0.000000e+000i)
|
(+1.251430e-308+0.000000e+000i)
|
||||||
|
|
||||||
=========== ken/intervar.go
|
=========== ken/intervar.go
|
||||||
print 1 bio 2 file 3 -- abc
|
print 1 bio 2 file 3 -- abc
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
|
|
||||||
package main
|
package main
|
||||||
|
|
||||||
|
import "os"
|
||||||
|
|
||||||
var nbad int
|
var nbad int
|
||||||
|
|
||||||
func assert(cond bool, msg string) {
|
func assert(cond bool, msg string) {
|
||||||
@ -18,6 +20,19 @@ func assert(cond bool, msg string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func equal(a, b float) bool {
|
||||||
|
if os.Getenv("GOARCH") != "arm" {
|
||||||
|
return a == b
|
||||||
|
}
|
||||||
|
d := a-b
|
||||||
|
if a > b {
|
||||||
|
return d < a * 1.0e-7
|
||||||
|
}
|
||||||
|
d = -d
|
||||||
|
return d < b * 1.0e-7
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
// bool
|
// bool
|
||||||
var t bool = true;
|
var t bool = true;
|
||||||
@ -134,12 +149,12 @@ func main() {
|
|||||||
assert(f04 == f05, "f04");
|
assert(f04 == f05, "f04");
|
||||||
assert(f05 == f06, "f05");
|
assert(f05 == f06, "f05");
|
||||||
assert(f07 == -f08, "f07");
|
assert(f07 == -f08, "f07");
|
||||||
assert(f09 == 1/f10, "f09");
|
assert(equal(f09, 1/f10), "f09");
|
||||||
assert(f11 == f09, "f11");
|
assert(f11 == f09, "f11");
|
||||||
assert(f12 == f10, "f12");
|
assert(f12 == f10, "f12");
|
||||||
assert(f13 == f09/10.0, "f13");
|
assert(equal(f13, f09/10.0), "f13");
|
||||||
assert(f14 == f12/10.0, "f14");
|
assert(equal(f14, f12/10.0), "f14");
|
||||||
assert(f15 == f16/1e20, "f15");
|
assert(equal(f15, f16/1e20), "f15");
|
||||||
|
|
||||||
// character
|
// character
|
||||||
var c0 uint8 = 'a';
|
var c0 uint8 = 'a';
|
||||||
|
Loading…
Reference in New Issue
Block a user