@@ -318,19 +318,19 @@ public void TestEquals() {
318318 {
319319 object objectTemp =
320320
321- EFloat . FromString ( "0.009461540475412139260145553670698466186015902447450593622262751970123371581303298477485466592231565609" ) ;
321+ EFloat . FromString ( "0.009461540475412139260145553670698466186015902447450593622262751970123371581303298477485466592231565609" ) ;
322322 object objectTemp2 =
323323
324- EFloat . FromString ( "0.009461540475412139260145553670698466186015902447450593622262751970123371581303298477485466592231565609" ) ;
324+ EFloat . FromString ( "0.009461540475412139260145553670698466186015902447450593622262751970123371581303298477485466592231565609" ) ;
325325 Assert . AreEqual ( objectTemp , objectTemp2 ) ;
326326 }
327327 {
328328 object objectTemp =
329329
330- EFloat . FromString ( "0.009461540475412139260145553670698466186015902447450593622262751970123371581303298477485466592231565609" ) ;
330+ EFloat . FromString ( "0.009461540475412139260145553670698466186015902447450593622262751970123371581303298477485466592231565609" ) ;
331331 object objectTemp2 =
332332
333- EFloat . FromString ( "0.001809476049361792727571247490438259768858020288404502743164967883090669271207537395819291033916115474" ) ;
333+ EFloat . FromString ( "0.001809476049361792727571247490438259768858020288404502743164967883090669271207537395819291033916115474" ) ;
334334 Assert . AreNotEqual ( objectTemp , objectTemp2 ) ;
335335 }
336336 var r = new RandomGenerator ( ) ;
@@ -872,23 +872,23 @@ public void TestIsZero() {
872872 Assert . IsFalse ( EFloat . SignalingNaN . IsZero ) ;
873873 }
874874
875- [ Test ]
876- public void TestCloseToPowerOfTwo ( ) {
877- string [ ] variations = {
878- String . Empty , ".0" , ".00" , ".000" ,
879- ".4" , ".40" , ".6" , ".60" , ".5" , ".50" , ".500" ,
880- } ;
881- for ( var i = 31 ; i < 129 ; ++ i ) {
882- EInteger ei = EInteger . FromInt32 ( 1 ) . ShiftLeft ( i ) ;
883- foreach ( string vari in variations ) {
884- TestStringToDoubleSingleOne ( ei . ToString ( ) + vari ) ;
885- TestStringToDoubleSingleOne ( ei . Add ( 1 ) . ToString ( ) + vari ) ;
886- TestStringToDoubleSingleOne ( ei . Subtract ( 1 ) . ToString ( ) + vari ) ;
887- TestStringToDoubleSingleOne ( ei . Add ( 2 ) . ToString ( ) + vari ) ;
888- TestStringToDoubleSingleOne ( ei . Subtract ( 2 ) . ToString ( ) + vari ) ;
889- }
890- }
891- }
875+ [ Test ]
876+ public void TestCloseToPowerOfTwo ( ) {
877+ string [ ] variations = {
878+ String . Empty , ".0" , ".00" , ".000" ,
879+ ".4" , ".40" , ".6" , ".60" , ".5" , ".50" , ".500" ,
880+ } ;
881+ for ( var i = 31 ; i < 129 ; ++ i ) {
882+ EInteger ei = EInteger . FromInt32 ( 1 ) . ShiftLeft ( i ) ;
883+ foreach ( string vari in variations ) {
884+ TestStringToDoubleSingleOne ( ei . ToString ( ) + vari ) ;
885+ TestStringToDoubleSingleOne ( ei . Add ( 1 ) . ToString ( ) + vari ) ;
886+ TestStringToDoubleSingleOne ( ei . Subtract ( 1 ) . ToString ( ) + vari ) ;
887+ TestStringToDoubleSingleOne ( ei . Add ( 2 ) . ToString ( ) + vari ) ;
888+ TestStringToDoubleSingleOne ( ei . Subtract ( 2 ) . ToString ( ) + vari ) ;
889+ }
890+ }
891+ }
892892
893893 public static void TestParseNumberFxxLine ( string line ) {
894894 // Parse test case format used in:
@@ -914,41 +914,42 @@ public static void TestParseNumberFxxLine(string line) {
914914
915915 public static void TestParseNumberFxx (
916916 string str ,
917- short _f16 ,
917+ short f16 ,
918918 int f32 ,
919919 long f64 ,
920920 string line ) {
921- // TODO: Support f16 test
922- // TODO: Add From/ToHalfBits in EDecimal/EFloat/ERational
923- EFloat efsng = EFloat . FromSingleBits ( f32 ) ;
924- EFloat efdbl = EFloat . FromDoubleBits ( f64 ) ;
925- // Begin test
926- if ( efsng . IsFinite ) {
927- TestStringToSingleOne ( str ) ;
928- }
929- if ( efdbl . IsFinite ) {
930- TestStringToDoubleOne ( str ) ;
931- }
932- EFloat ef ;
933- ef = EFloat . FromString ( str , EContext . Binary64 ) ;
934- Assert . AreEqual ( f64 , ef . ToDoubleBits ( ) , line ) ;
935- ef = EFloat . FromString ( str , EContext . Binary32 ) ;
936- Assert . AreEqual ( f32 , ef . ToSingleBits ( ) , line ) ;
937- ef = EFloat . FromString (
921+ Assert . AreEqual ( f16 , f16 ) ;
922+ // TODO: Support f16 test
923+ // TODO: Add From/ToHalfBits in EDecimal/EFloat/ERational
924+ EFloat efsng = EFloat . FromSingleBits ( f32 ) ;
925+ EFloat efdbl = EFloat . FromDoubleBits ( f64 ) ;
926+ // Begin test
927+ if ( efsng . IsFinite ) {
928+ TestStringToSingleOne ( str ) ;
929+ }
930+ if ( efdbl . IsFinite ) {
931+ TestStringToDoubleOne ( str ) ;
932+ }
933+ EFloat ef ;
934+ ef = EFloat . FromString ( str , EContext . Binary64 ) ;
935+ Assert . AreEqual ( f64 , ef . ToDoubleBits ( ) , line ) ;
936+ ef = EFloat . FromString ( str , EContext . Binary32 ) ;
937+ Assert . AreEqual ( f32 , ef . ToSingleBits ( ) , line ) ;
938+ ef = EFloat . FromString (
938939 "xxx" + str + "xxx" ,
939940 3 ,
940941 str . Length ,
941942 EContext . Binary64 ) ;
942- Assert . AreEqual ( f64 , ef . ToDoubleBits ( ) , line ) ;
943- ef = EFloat . FromString (
943+ Assert . AreEqual ( f64 , ef . ToDoubleBits ( ) , line ) ;
944+ ef = EFloat . FromString (
944945 "xxx" + str + "xxx" ,
945946 3 ,
946947 str . Length ,
947948 EContext . Binary32 ) ;
948- Assert . AreEqual ( f32 , ef . ToSingleBits ( ) , line ) ;
949- EDecimal ed = EDecimal . FromString ( str ) ;
950- Assert . AreEqual ( ed . ToSingleBits ( ) , f32 , str ) ;
951- Assert . AreEqual ( ed . ToDoubleBits ( ) , f64 , str ) ;
949+ Assert . AreEqual ( f32 , ef . ToSingleBits ( ) , line ) ;
950+ EDecimal ed = EDecimal . FromString ( str ) ;
951+ Assert . AreEqual ( ed . ToSingleBits ( ) , f32 , str ) ;
952+ Assert . AreEqual ( ed . ToDoubleBits ( ) , f64 , str ) ;
952953 }
953954
954955 [ Test ]
@@ -1016,7 +1017,7 @@ public void TestLog() {
10161017 [ Test ]
10171018 public void TestLogExpSpecificA ( ) {
10181019 EFloat efa = EFloat . Create ( 5094638944929121L ,
1019- - 43 ) . ExpM1 ( EContext . Binary64 ) ;
1020+ - 43 ) . ExpM1 ( EContext . Binary64 ) ;
10201021 EInteger mant = efa . Mantissa ;
10211022 Assert . IsTrue ( mant . Abs ( ) . GetUnsignedBitLengthAsInt64 ( ) <= 53 ) ;
10221023 EFloat efb = EFloat . Create ( 6823497764200007L , 783 ) ;
@@ -1035,7 +1036,7 @@ public void TestLogExpSpecificB() {
10351036 [ Test ]
10361037 public void TestLogExpSpecificC ( ) {
10371038 EFloat efa = EFloat . Create ( - 1184982539430741L ,
1038- - 52 ) . Exp ( EContext . Binary64 ) ;
1039+ - 52 ) . Exp ( EContext . Binary64 ) ;
10391040 EInteger mant = efa . Mantissa ;
10401041 Assert . IsTrue ( mant . Abs ( ) . GetUnsignedBitLengthAsInt64 ( ) <= 53 ) ;
10411042 EFloat efb = EFloat . Create ( 6923387652188847L , - 53 ) ;
@@ -1045,15 +1046,15 @@ public void TestLogExpSpecificC() {
10451046 [ Test ]
10461047 public void TestLogExpSpecificD ( ) {
10471048 EFloat efa = EFloat . Create ( 6832986215039611L ,
1048- - 38 ) . Log1P ( EContext . Binary64 ) ;
1049+ - 38 ) . Log1P ( EContext . Binary64 ) ;
10491050 EFloat efb = EFloat . Create ( 1424402087294909L , - 47 ) ;
10501051 string str = OutputEF ( efb ) + "\n " + OutputEF ( efa ) ;
10511052 TestCommon . CompareTestEqual ( efb , efa , str ) ;
10521053 }
10531054 [ Test ]
10541055 public void TestLogExpSpecificE ( ) {
10551056 EFloat efa = EFloat . Create ( 5615046595603761L ,
1056- - 44 ) . ExpM1 ( EContext . Binary64 ) ;
1057+ - 44 ) . ExpM1 ( EContext . Binary64 ) ;
10571058 EInteger mant = efa . Mantissa ;
10581059 Assert . IsTrue ( mant . Abs ( ) . GetUnsignedBitLengthAsInt64 ( ) <= 53 ) ;
10591060 EFloat efb = EFloat . Create ( 6269016557695007L , 408 ) ;
@@ -2125,10 +2126,10 @@ public void TestCloseToOverflowSpecific() {
21252126 false ) . WithExponentClamp ( true ) . WithSimplified ( false ) ;
21262127 EInteger emant =
21272128
2128- EInteger . FromString ( "88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888" ) ;
2129+ EInteger . FromString ( "88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888" ) ;
21292130 EInteger eexp =
21302131
2131- EInteger . FromString ( "1000000000000000000000000000000000000000000000000000000000000" ) ;
2132+ EInteger . FromString ( "1000000000000000000000000000000000000000000000000000000000000" ) ;
21322133 EFloat efmant = EFloat . FromEInteger ( emant ) ;
21332134 EFloat efexp = EFloat . FromEInteger ( eexp ) ;
21342135 EFloat ef2 = efmant . Multiply ( efexp , ec ) ;
@@ -2143,10 +2144,10 @@ public void TestCloseToOverflowSpecific() {
21432144 public void TestStringToDoubleSpecificA ( ) {
21442145 string str =
21452146
2146- "395327047447757233151852025916007341543830859020311182348280049405196796002596109672166636419495856284607016106216608940280159980410562166599659829549836399698289289291865158130408917411887384321629920907652092446340673107744633313627817849916899822288644199811238047243389339131191051062809216261025215824523.4450649076678708780046658731481724174843552673744114894507741447375332545091864773666544122664744761333144781246291659228465651037706198817528715653479238826021855332253112859123685832653222952164708641577926580176434675271038652656763152189489079211898438385589908245057380361924564889535903026779733005698423207728797753101352096950270825633677221801202735885609696599439158086869381984718373482202897732285374878471795568389970731523802567947950548336665365358918558902407299370109971613731348136804887326596306602541763433746075226973971630905830686044475031568633180101625817896363428603835057150659940109566037118543874354367476000190935017225290762348459773388606367426256772899921636" ;
2147+ "395327047447757233151852025916007341543830859020311182348280049405196796002596109672166636419495856284607016106216608940280159980410562166599659829549836399698289289291865158130408917411887384321629920907652092446340673107744633313627817849916899822288644199811238047243389339131191051062809216261025215824523.4450649076678708780046658731481724174843552673744114894507741447375332545091864773666544122664744761333144781246291659228465651037706198817528715653479238826021855332253112859123685832653222952164708641577926580176434675271038652656763152189489079211898438385589908245057380361924564889535903026779733005698423207728797753101352096950270825633677221801202735885609696599439158086869381984718373482202897732285374878471795568389970731523802567947950548336665365358918558902407299370109971613731348136804887326596306602541763433746075226973971630905830686044475031568633180101625817896363428603835057150659940109566037118543874354367476000190935017225290762348459773388606367426256772899921636" ;
21472148 string strb =
21482149
2149- "179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792" ;
2150+ "179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792" ;
21502151 EDecimal eda = EDecimal . FromString ( str ) ;
21512152 EDecimal edb = EDecimal . FromString ( strb ) ;
21522153 TestCommon . CompareTestLess ( edb , eda ) ;
@@ -2958,17 +2959,19 @@ public void TestToDoubleRounding() {
29582959 TestToFloatRoundingOne ( objectTemp , true ) ;
29592960 }
29602961 {
2962+ string rrs = "-1000000000000000000000000000" +
2963+ "0000000000000000000000000" ;
29612964 EFloat objectTemp = EFloat . Create (
2962- EInteger . FromRadixString ( "-10000000000000000000000000000000000000000000000000000" , 2 ) ,
2963- EInteger . FromInt32 ( - 1074 ) ) ;
2965+ EInteger . FromRadixString ( rrs , 2 ) ,
2966+ EInteger . FromInt32 ( - 1074 ) ) ;
29642967 TestToFloatRoundingOne ( objectTemp , true ) ;
29652968 objectTemp = EFloat . Create (
29662969 EInteger . FromRadixString ( "1010011" , 2 ) ,
29672970 EInteger . FromInt32 ( - 1034 ) ) ;
29682971 TestToFloatRoundingOne ( objectTemp , true ) ;
29692972 objectTemp = EFloat . Create (
2970- EInteger . FromRadixString ( "100110100000000011000010111000111111101" , 2 ) ,
2971- EInteger . FromInt32 ( - 1073 ) ) ;
2973+ EInteger . FromRadixString ( "100110100000000011000010111000111111101" , 2 ) ,
2974+ EInteger . FromInt32 ( - 1073 ) ) ;
29722975 TestToFloatRoundingOne ( objectTemp , true ) ;
29732976 }
29742977 }
0 commit comments