/* Ċ Ġ* ĠĠĠ ĠCopyright Ġ 2 0 1 9 ĠU gl jes a ĠJ ovan ov ic Ċ Ġ* Ċ Ġ* ĠĠĠ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* ĠĠĠ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠĠĠ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠĠĠ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* ĠĠĠ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠĠĠ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠĠĠ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* ĠĠĠ Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . ion spin . kotlin . b ignum . integer . ar ithmetic Ċ Ċ import Ġcom . ion spin . kotlin . b ignum . integer . BigInteger Ċ import Ġcom . ion spin . kotlin . b ignum . integer . Sign Ċ import Ġcom . ion spin . kotlin . b ignum . integer . to BigInteger Ċ import Ġkotlin . math . absolute Value Ċ import Ġkotlin . test . Ignore Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assert Fails With Ċ import Ġkotlin . test . assertTrue Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠU gl jes a ĠJ ovan ov ic Ċ Ġ* Ġug lj es a . j ovan ov ic @ ion spin . com Ċ Ġ* Ġon Ġ 2 3 - Mar - 2 0 1 9 Ċ Ġ*/ Ċ Ċ class ĠConversion Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest From Int () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġone Ġ= ĠBigInteger . from Int ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġnegative One Ġ= ĠBigInteger . from Int (- 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġmax Int Ġ= ĠBigInteger . from Int ( Int . MAX _ VALUE ) ĊĠĠĠĠĠĠĠ Ġval Ġmin Int Ġ= ĠBigInteger . from Int ( Int . MIN _ VALUE ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġone Ġ== ĠBigInteger . ONE Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġnegative One Ġ== Ġ- BigInteger . ONE Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Int . magnitude [ 0 ] Ġ== ĠInt . MAX _ VALUE . to Long (). absolute Value . to UL ong () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Int . sign Ġ== ĠSign . POSITIVE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Int . magnitude [ 0 ] Ġ== ĠInt . MIN _ VALUE . to Long (). absolute Value . to UL ong () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Int . sign Ġ== ĠSign . NEGATIVE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest From Long () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġone Ġ= ĠBigInteger . from Long ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġnegative One Ġ= ĠBigInteger . from Long (- 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġmax Long Ġ= ĠBigInteger . from Long ( Long . MAX _ VALUE ) ĊĠĠĠĠĠĠĠ Ġval Ġmin Long Ġ= ĠBigInteger . from Long ( Long . MIN _ VALUE ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġone Ġ== ĠBigInteger . ONE Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġnegative One Ġ== Ġ- BigInteger . ONE Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Long . magnitude [ 0 ] Ġ== ĠLong . MAX _ VALUE . absolute Value . to UL ong () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Long . sign Ġ== ĠSign . POSITIVE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Long . magnitude [ 0 ] Ġ== Ġ 0 UL Ġ&& Ġmin Long . magnitude [ 1 ] Ġ== Ġ 1 UL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Long . sign Ġ== ĠSign . NEGATIVE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest From Short () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġone Ġ= ĠBigInteger . from Short ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġnegative One Ġ= ĠBigInteger . from Short (- 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġmax Short Ġ= ĠBigInteger . from Short ( Short . MAX _ VALUE ) ĊĠĠĠĠĠĠĠ Ġval Ġmin Short Ġ= ĠBigInteger . from Short ( Short . MIN _ VALUE ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġone Ġ== ĠBigInteger . ONE Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġnegative One Ġ== Ġ- BigInteger . ONE Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Short . magnitude [ 0 ] Ġ== ĠShort . MAX _ VALUE . to Long (). absolute Value . to UL ong () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Short . sign Ġ== ĠSign . POSITIVE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Short . magnitude [ 0 ] Ġ== ĠShort . MIN _ VALUE . to Long (). absolute Value . to UL ong () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Short . sign Ġ== ĠSign . NEGATIVE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest From Byte () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġone Ġ= ĠBigInteger . from Byte ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġnegative One Ġ= ĠBigInteger . from Byte (- 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġmax Byte Ġ= ĠBigInteger . from Byte ( Byte . MAX _ VALUE ) ĊĠĠĠĠĠĠĠ Ġval Ġmin Byte Ġ= ĠBigInteger . from Byte ( Byte . MIN _ VALUE ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġone Ġ== ĠBigInteger . ONE Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġnegative One Ġ== Ġ- BigInteger . ONE Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Byte . magnitude [ 0 ] Ġ== ĠByte . MAX _ VALUE . to Long (). absolute Value . to UL ong () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Byte . sign Ġ== ĠSign . POSITIVE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Byte . magnitude [ 0 ] Ġ== ĠByte . MIN _ VALUE . to Long (). absolute Value . to UL ong () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Byte . sign Ġ== ĠSign . NEGATIVE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest To Float () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstring TestCase s Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"- 1 ", Ġ" 0 ", Ġ" 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLong . MAX _ VALUE . toString (), ĠLong . MIN _ VALUE . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLong . MAX _ VALUE . toString () Ġ+ Ġ" 1 2 3 ", ĠLong . MIN _ VALUE . toString () Ġ+ Ġ" 1 2 3 " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġstring TestCase s . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbig Int Ġ= ĠBigInteger . parse String ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfloat Ġ= Ġit . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbig Int . float Value () Ġ== Ġfloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest ToDouble () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstring TestCase s Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"- 1 ", Ġ" 0 ", Ġ" 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLong . MAX _ VALUE . toString (), ĠLong . MIN _ VALUE . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLong . MAX _ VALUE . toString () Ġ+ Ġ" 1 2 3 ", ĠLong . MIN _ VALUE . toString () Ġ+ Ġ" 1 2 3 " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġstring TestCase s . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbig Int Ġ= ĠBigInteger . parse String ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdouble Ġ= Ġit . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbig Int . doubleValue () Ġ== Ġdouble ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Ignore Ġ// ĠTakes Ġtoo Ġlong Ġon ĠTravis , Ġso ĠJS Ġtest Ġfail Ġ(> 2 0 0 0 ms ). ĠKar at sub a Ġimplementation Ġslow ed Ġthis Ġdown , Ġso Ġneeds Ġinvestigation ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Double Value Exact Failure () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstring TestCase s Ġ= ĠlistOf ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠDouble . MAX _ VALUE . toString () Ġ+ Ġ" 1 " Ġ// ĠThis Ġ" 1 " Ġaffects Ġthe Ġexponent ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDouble . MAX _ VALUE . toString () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġstring TestCase s . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With < Arithmetic Exception > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Double Ġvalue Ġto Ġparse : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbig Int Ġ= ĠBigInteger . parse String ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbig Int . doubleValue ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest BigInteger Float Creation () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfloat Test Value Array Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 f , Ġ 0 f , Ġ- 1 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 3 E 5 f ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġfloat Test Value Array . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbig Int Ġ= ĠBigInteger . try From Float ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbig Int . float Value () Ġ== Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbig Int Ġ= ĠBigInteger . try From Float ( Float . MIN _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbig Int . float Value () Ġ== Ġ 0 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest BigInteger Double Creation () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdouble Test Value Array Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 , Ġ 0 . 0 , Ġ- 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 2 3 E 5 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdouble Test Value Array . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbig Int Ġ= ĠBigInteger . try From Double ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbig Int . doubleValue () Ġ== Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbig Int Ġ= ĠBigInteger . try From Double ( Double . MIN _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbig Int . doubleValue () Ġ== Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Primitive Conversion Sign Values () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 . to BigInteger (). longValue () Ġ== Ġ- 1 L ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 . to BigInteger (). intValue () Ġ== Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 . to BigInteger (). short Value () Ġ== Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 . to BigInteger (). byte Value () Ġ== Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 . to BigInteger (). longValue () Ġ== Ġ 1 L ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 . to BigInteger (). intValue () Ġ== Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 . to BigInteger (). short Value () Ġ== Ġ 1 . to Short () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 . to BigInteger (). byte Value () Ġ== Ġ 1 . to Byte () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLong . MIN _ VALUE . to BigInteger (). longValue () Ġ== ĠLong . MIN _ VALUE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠU Long . MAX _ VALUE . to BigInteger (). ulong Value () Ġ== ĠU Long . MAX _ VALUE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt . MIN _ VALUE . to BigInteger (). intValue () Ġ== ĠInt . MIN _ VALUE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUInt . MAX _ VALUE . to BigInteger (). uint Value () Ġ== ĠUInt . MAX _ VALUE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠShort . MIN _ VALUE . to BigInteger (). short Value () Ġ== ĠShort . MIN _ VALUE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠU Short . MAX _ VALUE . to BigInteger (). ushort Value () Ġ== ĠU Short . MAX _ VALUE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠByte . MIN _ VALUE . to BigInteger (). byte Value () Ġ== ĠByte . MIN _ VALUE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠU Byte . MAX _ VALUE . to BigInteger (). ubyte Value () Ġ== ĠU Byte . MAX _ VALUE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ