import { convertTokenBase , fromTokenBase , fromWei , getDecimalFromEtherUnit , TokenValue , toTokenBase , toWei , Wei } from './units' ; const Units = { wei : '1' , kwei : '1000' , ada : '1000' , femtoether : '1000' , mwei : '1000000' , babbage : '1000000' , picoether : '1000000' , gwei : '1000000000' , shannon : '1000000000' , nanoether : '1000000000' , nano : '1000000000' , szabo : '1000000000000' , microether : '1000000000000' , micro : '1000000000000' , finney : '1000000000000000' , milliether : '1000000000000000' , milli : '1000000000000000' , ether : '1000000000000000000' , kether : '1000000000000000000000' , grand : '1000000000000000000000' , einstein : '1000000000000000000000' , mether : '1000000000000000000000000' , gether : '1000000000000000000000000000' , tether : '1000000000000000000000000000000' } ; describe ( 'Units' , ( ) => { describe ( 'ethereum units' , ( ) => { describe ( 'ether' , ( ) => { const wei = Wei ( Units . ether ) ; const ether = fromWei ( wei , 'ether' ) ; it ( 'should equal one ether' , ( ) => { expect ( ether ) . toEqual ( '1' ) ; } ) ; it ( 'should equal 1 * 10^18 wei' , ( ) => { const converted = toWei ( ether , getDecimalFromEtherUnit ( 'ether' ) ) ; expect ( converted . toString ( ) ) . toEqual ( Units . ether ) ; } ) ; } ) ; describe ( 'gwei' , ( ) => { const wei = Wei ( `2${ Units . gwei }` ) ; const gwei = fromWei ( wei , 'gwei' ) ; it ( 'should equal 21 gwei' , ( ) => { expect ( gwei ) . toEqual ( '21' ) ; } ) ; it ( 'should equal 21 * 10^9 wei' , ( ) => { const converted = toWei ( gwei , getDecimalFromEtherUnit ( 'gwei' ) ) ; expect ( converted . toString ( ) ) . toEqual ( wei . toString ( ) ) ; } ) ; } ) ; describe ( 'kwei' , ( ) => { const wei = Wei ( '1623' ) ; const kwei = fromWei ( wei , 'kwei' ) ; it ( 'should equal 1.623 kwei' , ( ) => { expect ( kwei ) . toEqual ( '1.623' ) ; } ) ; it ( 'should equal 1.623  * 10^3 wei' , ( ) => { const converted = toWei ( kwei , getDecimalFromEtherUnit ( 'kwei' ) ) ; expect ( converted . toString ( ) ) . toEqual ( '1623' ) ; } ) ; } ) ; } ) ; describe ( 'token units' , ( ) => { describe ( 'token 1' , ( ) => { const tokens = '732156.34592016' ; const decimal = 18 ; const tokenBase = toTokenBase ( tokens , decimal ) ; it ( 'toTokenBase should equal 732156345920160000000000' , ( ) => { expect ( tokenBase . toString ( ) ) . toEqual ( '732156345920160000000000' ) ; } ) ; it ( 'fromTokenBase should equal 732156.34592016' , ( ) => { expect ( fromTokenBase ( tokenBase , decimal ) ) . toEqual ( tokens ) ; } ) ; } ) ; describe ( 'token 2' , ( ) => { const tokens = '8000' ; const decimal = 8 ; const converted = fromTokenBase ( TokenValue ( tokens ) , decimal ) ; it ( 'fromTokenBase should equal 0.00008' , ( ) => { expect ( converted ) . toEqual ( '0.00008' ) ; } ) ; it ( 'toTokenBase should equal 8000' , ( ) => { expect ( toTokenBase ( converted , decimal ) . toString ( ) ) . toEqual ( '8000' ) ; } ) ; } ) ; describe ( 'convertTokenBase' , ( ) => { const conversions = [ { oldDecimal : 0 , newDecimal : 18 , startValue : '42' , endValue : '42000000000000000000' } , { oldDecimal : 6 , newDecimal : 12 , startValue : '547834782' , endValue : '547834782000000' } , { oldDecimal : 18 , newDecimal : 18 , startValue : '311095801958902158012580' , endValue : '311095801958902158012580' } ] ; conversions . forEach ( ( c ) => { it ( `should convert decimal ${ c . oldDecimal } to decimal ${ c . newDecimal }` , ( ) => { const tokenValue = TokenValue ( c . startValue ) ; const converted = convertTokenBase ( tokenValue , c . oldDecimal , c . newDecimal ) ; expect ( converted . toString ( ) ) . toEqual ( c . endValue ) ; } ) ; } ) ; } ) ; } ) ; } ) ;