aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gleam/int.gleam56
-rw-r--r--test/gleam/int_test.gleam44
2 files changed, 61 insertions, 39 deletions
diff --git a/src/gleam/int.gleam b/src/gleam/int.gleam
index 65e82f7..eafbade 100644
--- a/src/gleam/int.gleam
+++ b/src/gleam/int.gleam
@@ -106,6 +106,45 @@ if javascript {
"../gleam_stdlib.mjs" "parse_int"
}
+/// Parses a given string as an int in a given base if possible.
+/// Supports only bases 2 to 36, for values outside of which this function returns an `Error(Nil)`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > base_parse("10", 2)
+/// Ok(2)
+///
+/// > base_parse("30", 16)
+/// Ok(48)
+///
+/// > base_parse("1C", 36)
+/// Ok(48)
+///
+/// > base_parse("48", 1)
+/// Error(Nil)
+///
+/// > base_parse("48", 37)
+/// Error(Nil)
+/// ```
+///
+pub fn base_parse(string: String, base: Int) -> Result(Int, Nil) {
+ case base >= 2 && base <= 36 {
+ True -> do_base_parse(string, base)
+ False -> Error(Nil)
+ }
+}
+
+if erlang {
+ external fn do_base_parse(String, Int) -> Result(Int, Nil) =
+ "gleam_stdlib" "int_from_base_string"
+}
+
+if javascript {
+ external fn do_base_parse(String, Int) -> Result(Int, Nil) =
+ "../gleam_stdlib.mjs" "int_from_base_string"
+}
+
/// Prints a given int to a string.
///
/// ## Examples
@@ -183,23 +222,6 @@ if javascript {
"../gleam_stdlib.mjs" "int_to_base_string"
}
-pub fn from_base_string(string: String, base: Int) -> Result(Int, Nil) {
- case base >= 2 && base <= 36 {
- True -> do_from_base_string(string, base)
- False -> Error(Nil)
- }
-}
-
-if erlang {
- external fn do_from_base_string(String, Int) -> Result(Int, Nil) =
- "gleam_stdlib" "int_from_base_string"
-}
-
-if javascript {
- external fn do_from_base_string(String, Int) -> Result(Int, Nil) =
- "../gleam_stdlib.mjs" "int_from_base_string"
-}
-
/// Prints a given int to a string using base2.
///
/// ## Examples
diff --git a/test/gleam/int_test.gleam b/test/gleam/int_test.gleam
index 594720c..582cec5 100644
--- a/test/gleam/int_test.gleam
+++ b/test/gleam/int_test.gleam
@@ -69,6 +69,28 @@ pub fn parse_test() {
|> should.equal(Error(Nil))
}
+pub fn base_parse_test() {
+ "100"
+ |> int.base_parse(16)
+ |> should.equal(Ok(256))
+
+ "-100"
+ |> int.base_parse(16)
+ |> should.equal(Ok(-256))
+
+ "100"
+ |> int.base_parse(1)
+ |> should.equal(Error(Nil))
+
+ "100"
+ |> int.base_parse(37)
+ |> should.equal(Error(Nil))
+
+ "AG"
+ |> int.base_parse(16)
+ |> should.equal(Error(Nil))
+}
+
pub fn to_base_string_test() {
100
|> int.to_base_string(16)
@@ -87,28 +109,6 @@ pub fn to_base_string_test() {
|> should.equal(Error(int.InvalidBase))
}
-pub fn from_base_string_test() {
- "100"
- |> int.from_base_string(16)
- |> should.equal(Ok(256))
-
- "-100"
- |> int.from_base_string(16)
- |> should.equal(Ok(-256))
-
- "100"
- |> int.from_base_string(1)
- |> should.equal(Error(Nil))
-
- "100"
- |> int.from_base_string(37)
- |> should.equal(Error(Nil))
-
- "AG"
- |> int.from_base_string(16)
- |> should.equal(Error(Nil))
-}
-
pub fn to_base2_test() {
100
|> int.to_base2()