geam-stdlib 0.2.2

Official Gleam standard-library providers for Geam
Documentation
import gleam/bit_array
import gleam/bytes_tree
import gleam/list
import gleam/string

pub fn main() {
  let base = bytes_tree.from_string("middle")
  let left = bytes_tree.prepend_string(base, "left-")
  let right = bytes_tree.append_string(base, "-right")

  assert bytes_tree.to_bit_array(base) == <<"middle":utf8>>
  assert bytes_tree.to_bit_array(left) == <<"left-middle":utf8>>
  assert bytes_tree.to_bit_array(right) == <<"middle-right":utf8>>

  let with_bytes =
    bytes_tree.prepend(base, <<"[":utf8>>)
    |> bytes_tree.append(<<"]":utf8>>)
  assert bytes_tree.to_bit_array(with_bytes) == <<"[middle]":utf8>>

  let with_trees =
    bytes_tree.prepend_tree(base, bytes_tree.from_string("before-"))
    |> bytes_tree.append_tree(bytes_tree.from_string("-after"))
  assert bytes_tree.to_bit_array(with_trees) == <<"before-middle-after":utf8>>

  let concatenated = bytes_tree.concat([
    bytes_tree.from_string("one"),
    bytes_tree.from_string("-"),
    bytes_tree.from_string("two"),
  ])
  assert bytes_tree.to_bit_array(concatenated) == <<"one-two":utf8>>

  let concatenated_bits = bytes_tree.concat_bit_arrays([
    <<5:size(3)>>,
    <<3:size(2)>>,
  ])
  assert bytes_tree.to_bit_array(concatenated_bits)
    == <<5:size(3), 0:size(5), 3:size(2), 0:size(6)>>

  let flat = bytes_tree.from_string("ab")
  let segmented = bytes_tree.concat([
    bytes_tree.from_string("a"),
    bytes_tree.from_string("b"),
  ])
  assert flat != segmented
  assert bytes_tree.to_bit_array(flat) == bytes_tree.to_bit_array(segmented)

  let deep =
    list.repeat(bytes_tree.from_string("x"), times: 512)
    |> list.fold(from: bytes_tree.new(), with: bytes_tree.append_tree)
  let deep_bits = bytes_tree.to_bit_array(deep)
  assert bytes_tree.byte_size(deep) == 512
  assert bit_array.to_string(deep_bits) == Ok(string.repeat("x", times: 512))

  Nil
}
// @geam:expect Nil