Skip to content

Commit 4a20d6e

Browse files
committed
Update documentation and tests
1 parent 4e5c7e8 commit 4a20d6e

3 files changed

Lines changed: 61 additions & 24 deletions

File tree

lib/cldr/number.ex

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ defmodule Cldr.Number do
184184
number in a locale's language. The applicable formats are `:spellout`,
185185
`:spellout_year` and `:ordinal`. A number can also be formatted as roman
186186
numbers by using the format `:roman` or `:roman_lower`. If the format is
187-
an RBNF format then the options `:gender` and/or `:grammatical_case` may also
187+
an RBNF format then the options `:gender` and`:grammatical_case` may also
188188
be provided. If they are provided then they will be used to try to resolve
189189
an available RBNF rule for the given `:locale`.
190190
@@ -344,6 +344,8 @@ defmodule Cldr.Number do
344344
* Finally, of not otherwise found, an attempt is made to find the format
345345
without the requested gender or grammatical case.
346346
347+
* If `;grammatical_case` is provided but not `:gender`, the `:grammatical_case`
348+
is ignored.
347349
348350
### Returns
349351
@@ -353,66 +355,69 @@ defmodule Cldr.Number do
353355
354356
### Examples
355357
356-
iex> Cldr.Number.to_string 12345, TestBackend.Cldr
358+
iex> Cldr.Number.to_string(12345, TestBackend.Cldr)
357359
{:ok, "12,345"}
358360
359-
iex> Cldr.Number.to_string 12345, TestBackend.Cldr, locale: "fr"
361+
iex> Cldr.Number.to_string(12345, TestBackend.Cldr, locale: "fr")
360362
{:ok, "12 345"}
361363
362-
iex> Cldr.Number.to_string 1345.32, TestBackend.Cldr, currency: :EUR, locale: "es", minimum_grouping_digits: 1
364+
iex> Cldr.Number.to_string(1345.32, TestBackend.Cldr, currency: :EUR, locale: "es", minimum_grouping_digits: 1)
363365
{:ok, "1.345,32 €"}
364366
365-
iex> Cldr.Number.to_string 1345.32, TestBackend.Cldr, currency: :EUR, locale: "es"
367+
iex> Cldr.Number.to_string(1345.32, TestBackend.Cldr, currency: :EUR, locale: "es")
366368
{:ok, "1345,32 €"}
367369
368-
iex> Cldr.Number.to_string 12345, TestBackend.Cldr, locale: "fr", currency: "USD"
370+
iex> Cldr.Number.to_string(12345, TestBackend.Cldr, locale: "fr", currency: "USD")
369371
{:ok, "12 345,00 $US"}
370372
371-
iex> Cldr.Number.to_string 12345, TestBackend.Cldr, format: "#E0"
373+
iex> Cldr.Number.to_string(12345, TestBackend.Cldr, format: "#E0")
372374
{:ok, "1.2345E4"}
373375
374-
iex> Cldr.Number.to_string 12345, TestBackend.Cldr, format: :accounting, currency: "THB"
376+
iex> Cldr.Number.to_string(12345, TestBackend.Cldr, format: :accounting, currency: "THB")
375377
{:ok, "THB 12,345.00"}
376378
377-
iex> Cldr.Number.to_string -12345, TestBackend.Cldr, format: :accounting, currency: "THB"
379+
iex> Cldr.Number.to_string(-12345, TestBackend.Cldr, format: :accounting, currency: "THB")
378380
{:ok, "(THB 12,345.00)"}
379381
380-
iex> Cldr.Number.to_string 12345, TestBackend.Cldr, format: :accounting, currency: "THB",
381-
...> locale: "th"
382+
iex> Cldr.Number.to_string(12345, TestBackend.Cldr, format: :accounting, currency: "THB",
383+
...> locale: "th")
382384
{:ok, "฿12,345.00"}
383385
384-
iex> Cldr.Number.to_string 12345, TestBackend.Cldr, format: :accounting, currency: "THB",
385-
...> locale: "th", number_system: :native
386+
iex> Cldr.Number.to_string(12345, TestBackend.Cldr, format: :accounting, currency: "THB",
387+
...> locale: "th", number_system: :native)
386388
{:ok, "฿๑๒,๓๔๕.๐๐"}
387389
388-
iex> Cldr.Number.to_string 1244.30, TestBackend.Cldr, format: :long
390+
iex> Cldr.Number.to_string(1244.30, TestBackend.Cldr, format: :long)
389391
{:ok, "1 thousand"}
390392
391-
iex> Cldr.Number.to_string 1244.30, TestBackend.Cldr, format: :long, currency: "USD"
393+
iex> Cldr.Number.to_string(1244.30, TestBackend.Cldr, format: :long, currency: "USD")
392394
{:ok, "1,244 US dollars"}
393395
394-
iex> Cldr.Number.to_string 1244.30, TestBackend.Cldr, format: :short
396+
iex> Cldr.Number.to_string(1244.30, TestBackend.Cldr, format: :short)
395397
{:ok, "1K"}
396398
397-
iex> Cldr.Number.to_string 1244.30, TestBackend.Cldr, format: :short, currency: "EUR"
399+
iex> Cldr.Number.to_string(1244.30, TestBackend.Cldr, format: :short, currency: "EUR")
398400
{:ok, "€1K"}
399401
400-
iex> Cldr.Number.to_string 1234, TestBackend.Cldr, format: :spellout
402+
iex> Cldr.Number.to_string(1234, TestBackend.Cldr, format: :spellout)
401403
{:ok, "one thousand two hundred thirty-four"}
402404
403-
iex> Cldr.Number.to_string 1234, TestBackend.Cldr, format: :spellout_verbose
405+
iex> Cldr.Number.to_string(1234, TestBackend.Cldr, format: :spellout_verbose)
404406
{:ok, "one thousand two hundred and thirty-four"}
405407
406-
iex> Cldr.Number.to_string 1989, TestBackend.Cldr, format: :spellout_year
408+
iex> Cldr.Number.to_string(1989, TestBackend.Cldr, format: :spellout_year)
407409
{:ok, "nineteen eighty-nine"}
408410
409-
iex> Cldr.Number.to_string 123, TestBackend.Cldr, format: :ordinal
411+
iex> Cldr.Number.to_string(123, TestBackend.Cldr, format: :ordinal)
410412
{:ok, "123rd"}
411413
412-
iex> Cldr.Number.to_string 123, TestBackend.Cldr, format: :roman
414+
iex> Cldr.Number.to_string(123, format: :ordinal, gender: :feminine, grammatical_case: :accusative, locale: :ru)
415+
{:ok, "123-ю"}
416+
417+
iex> Cldr.Number.to_string(123, TestBackend.Cldr, format: :roman)
413418
{:ok, "CXXIII"}
414419
415-
iex> Cldr.Number.to_string 123, TestBackend.Cldr, locale: "th-u-nu-thai"
420+
iex> Cldr.Number.to_string(123, TestBackend.Cldr, locale: "th-u-nu-thai")
416421
{:ok, "๑๒๓"}
417422
418423
### Errors

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ defmodule Cldr.Numbers.Mixfile do
33

44
use Mix.Project
55

6-
@version "2.37.0-dev"
6+
@version "2.37.0"
77

88
def project do
99
[

test/number/rbnf_test.exs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,38 @@ defmodule Rbnf.Test do
156156
{:ok, "ciento veintitrés punto cuatro cinco seis"}
157157
end
158158

159+
test "RBNF formatting with :gender" do
160+
assert {:ok, "123-я"} = Cldr.Number.to_string(123, format: :ordinal, gender: :feminine, locale: :ru)
161+
assert {:ok, "123-й"} = Cldr.Number.to_string(123, format: :ordinal, gender: :masculine, locale: :ru)
162+
assert {:ok, "123-e"} = Cldr.Number.to_string(123, format: :ordinal, gender: :plural, locale: :ru)
163+
end
164+
165+
test "RBNF formatting with :gender and :grammatical_case" do
166+
assert {:ok, "123-й"} = Cldr.Number.to_string(123, format: :ordinal, gender: :feminine, grammatical_case: :genitive, locale: :ru)
167+
assert {:ok, "123-ю"} = Cldr.Number.to_string(123, format: :ordinal, gender: :feminine, grammatical_case: :accusative, locale: :ru)
168+
assert {:ok, "123-й"} = Cldr.Number.to_string(123, format: :ordinal, gender: :feminine, grammatical_case: :instrumental, locale: :ru)
169+
end
170+
171+
test "RBNF formatting with :grammatical_case alone (which is ignored)" do
172+
assert {:ok, "123"} = Cldr.Number.to_string(123, format: :ordinal, grammatical_case: :instrumental, locale: :ru)
173+
end
174+
175+
test "Invalid gender or grammatical case" do
176+
assert Cldr.Number.to_string(123, format: :ordinal_invalid, grammatical_case: :instrumental, locale: :ru) ==
177+
{:error,
178+
{Elixir.Cldr.Rbnf.NoRule, "RBNF rule :ordinal_invalid is unknown to locale \"ru\""}}
179+
180+
assert Cldr.Number.to_string(123, format: :ordinal, gender: :invalid_gender, grammatical_case: :instrumental, locale: :ru) ==
181+
{:error,
182+
{Elixir.Cldr.Number.UnknownGenderError,
183+
"The grammatical gender :invalid_gender is not known"}}
184+
185+
assert Cldr.Number.to_string 123, format: :ordinal, gender: :masculine, grammatical_case: :invalid, locale: :ru
186+
{:error,
187+
{Elixir.Cldr.Number.UnknownGrammaticalCaseError,
188+
"The grammatical case :invalid is not known"}}
189+
end
190+
159191
Elixir.Cldr.Rbnf.TestSupport.rbnf_tests(fn name, tests, module, function, locale ->
160192
test name do
161193
Enum.each(unquote(Macro.escape(tests)), fn {test_data, test_result} ->

0 commit comments

Comments
 (0)