4
0
Fork 0

Added unit converters, resolves #7

pull/17/head
hswick 7 years ago
parent 62a8f0a174
commit 26b9d64651
  1. 54
      lib/exw3.ex
  2. 55
      test/exw3_test.exs

@ -1,5 +1,59 @@
defmodule ExW3 do
Module.register_attribute __MODULE__, :unit_map, persist: true, accumulate: false
@unit_map %{
:noether => 0,
:wei => 1,
:kwei => 1_000,
:Kwei => 1_000,
:babbage => 1_000,
:femtoether => 1_000,
:mwei => 1_000_000,
:Mwei => 1_000_000,
:lovelace => 1_000_000,
:picoether => 1_000_000,
:gwei => 1_000_000_000,
:Gwei => 1_000_000_000,
:shannon => 1_000_000_000,
:nanoether => 1_000_000_000,
:nano => 1_000_000_000,
:szabo => 1_000_000_000_000,
:microether => 1_000_000_000_000,
:micro => 1_000_000_000_000,
:finney => 1_000_000_000_000_000,
:milliether => 1_000_000_000_000_000,
:milli => 1_000_000_000_000_000,
:ether => 1_000_000_000_000_000_000,
:kether => 1_000_000_000_000_000_000_000,
:grand => 1_000_000_000_000_000_000_000,
:mether => 1_000_000_000_000_000_000_000_000,
:gether => 1_000_000_000_000_000_000_000_000_000,
:tether => 1_000_000_000_000_000_000_000_000_000_000
}
@spec get_unit_map() :: %{}
@doc "Returns the map used for ether unit conversion"
def get_unit_map do
@unit_map
end
def to_wei(num, key) do
if @unit_map[key] do
num * @unit_map[key]
else
throw "#{key} not valid unit"
end
end
def from_wei(num, key) do
if @unit_map[key] do
num / @unit_map[key]
else
throw "#{key} not valid unit"
end
end
@spec keccak256(binary()) :: binary()
@doc "Returns a 0x prepended 32 byte hash of the input string"
def keccak256(string) do

@ -181,7 +181,7 @@ defmodule EXW3Test do
receive do
{:event, {_filter_id, data}} ->
Agent.update(agent, fn list -> [data | list] end)
Agent.update(agent, fn list -> [data | list] end)
after 3_000 ->
raise "Never received event"
end
@ -341,4 +341,57 @@ defmodule EXW3Test do
end
test "unit conversion to_wei" do
assert ExW3.to_wei(1, :wei) == 1
assert ExW3.to_wei(1, :kwei) == 1_000
assert ExW3.to_wei(1, :Kwei) == 1_000
assert ExW3.to_wei(1, :babbage) == 1_000
assert ExW3.to_wei(1, :mwei) == 1_000_000
assert ExW3.to_wei(1, :Mwei) == 1_000_000
assert ExW3.to_wei(1, :lovelace) == 1_000_000
assert ExW3.to_wei(1, :gwei) == 1_000_000_000
assert ExW3.to_wei(1, :Gwei) == 1_000_000_000
assert ExW3.to_wei(1, :shannon) == 1_000_000_000
assert ExW3.to_wei(1, :szabo) == 1_000_000_000_000
assert ExW3.to_wei(1, :finney) == 1_000_000_000_000_000
assert ExW3.to_wei(1, :ether) == 1_000_000_000_000_000_000
assert ExW3.to_wei(1, :kether) == 1_000_000_000_000_000_000_000
assert ExW3.to_wei(1, :grand) == 1_000_000_000_000_000_000_000
assert ExW3.to_wei(1, :mether) == 1_000_000_000_000_000_000_000_000
assert ExW3.to_wei(1, :gether) == 1_000_000_000_000_000_000_000_000_000
assert ExW3.to_wei(1, :tether) == 1_000_000_000_000_000_000_000_000_000_000
assert ExW3.to_wei(1, :kwei) == ExW3.to_wei(1, :femtoether)
assert ExW3.to_wei(1, :szabo) == ExW3.to_wei(1, :microether)
assert ExW3.to_wei(1, :finney) == ExW3.to_wei(1, :milliether)
assert ExW3.to_wei(1, :milli) == ExW3.to_wei(1, :milliether)
assert ExW3.to_wei(1, :milli) == ExW3.to_wei(1000, :micro)
{:ok, agent} = Agent.start_link(fn -> false end)
try do
ExW3.to_wei(1, :wei1)
catch
_ -> Agent.update(agent, fn _ -> true end)
end
assert Agent.get(agent, fn state -> state end)
end
test "unit conversion from wei" do
assert ExW3.from_wei(1_000_000_000_000_000_000, :wei) == 1_000_000_000_000_000_000
assert ExW3.from_wei(1_000_000_000_000_000_000, :kwei) == 1_000_000_000_000_000
assert ExW3.from_wei(1_000_000_000_000_000_000, :mwei) == 1_000_000_000_000
assert ExW3.from_wei(1_000_000_000_000_000_000, :gwei) == 1_000_000_000
assert ExW3.from_wei(1_000_000_000_000_000_000, :szabo) == 1_000_000
assert ExW3.from_wei(1_000_000_000_000_000_000, :finney) == 1_000
assert ExW3.from_wei(1_000_000_000_000_000_000, :ether) == 1
assert ExW3.from_wei(1_000_000_000_000_000_000, :kether) == 0.001
assert ExW3.from_wei(1_000_000_000_000_000_000, :grand) == 0.001
assert ExW3.from_wei(1_000_000_000_000_000_000, :mether) == 0.000001
assert ExW3.from_wei(1_000_000_000_000_000_000, :gether) == 0.000000001
assert ExW3.from_wei(1_000_000_000_000_000_000, :tether) == 0.000000000001
end
end

Loading…
Cancel
Save