Skip to content

Commit

Permalink
Support numbers outside the scale for number scale (#5)
Browse files Browse the repository at this point in the history
* Support numbers outside the scale for number scale

* Bump version
  • Loading branch information
doughsay authored Jun 11, 2024
1 parent 5bea3e7 commit ceb93a6
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 20 deletions.
25 changes: 6 additions & 19 deletions lib/plox/number_scale.ex
Original file line number Diff line number Diff line change
Expand Up @@ -56,31 +56,18 @@ defmodule Plox.NumberScale do
def convert_to_range(scale, input_value, to_range) when is_number(input_value) do
value = Decimal.from_float(input_value / 1.0)

if in_range?(scale, value) do
raise ArgumentError,
message: "Invalid value `#{inspect(input_value)}` given for `#{inspect(scale)}`"
else
value
|> Decimal.sub(scale.first)
|> Decimal.mult(to_range.last - to_range.first)
|> Decimal.div(Decimal.sub(scale.last, scale.first))
|> Decimal.add(to_range.first)
|> Decimal.to_float()
end
value
|> Decimal.sub(scale.first)
|> Decimal.mult(to_range.last - to_range.first)
|> Decimal.div(Decimal.sub(scale.last, scale.first))
|> Decimal.add(to_range.first)
|> Decimal.to_float()
end

def convert_to_range(scale, value, _to_range) do
raise ArgumentError,
message: "Invalid value `#{inspect(value)}` given for `#{inspect(scale)}`"
end

defp in_range?(%{backwards?: true} = scale, value) do
Decimal.compare(value, scale.last) == :lt or Decimal.compare(value, scale.first) == :gt
end

defp in_range?(scale, value) do
Decimal.compare(value, scale.first) == :lt or Decimal.compare(value, scale.last) == :gt
end
end

defimpl Inspect do
Expand Down
2 changes: 1 addition & 1 deletion mix.exs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
defmodule Plox.MixProject do
use Mix.Project

@version "0.1.0"
@version "0.1.1"
@source_url "https://github.com/gridpoint-com/plox"

def project do
Expand Down

0 comments on commit ceb93a6

Please sign in to comment.