<!-- Generated with Stardoc: http://skydoc.bazel.build -->

<a name="#my_namespace.assert_non_empty"></a>

## my_namespace.assert_non_empty

<pre>
my_namespace.assert_non_empty(<a href="#my_namespace.assert_non_empty-some_list">some_list</a>, <a href="#my_namespace.assert_non_empty-other_list">other_list</a>)
</pre>

Asserts the two given lists are not empty.

### Parameters

<table class="params-table">
  <colgroup>
    <col class="col-param" />
    <col class="col-description" />
  </colgroup>
  <tbody>
    <tr id="my_namespace.assert_non_empty-some_list">
      <td><code>some_list</code></td>
      <td>
        required.
        <p>
          The first list
        </p>
      </td>
    </tr>
    <tr id="my_namespace.assert_non_empty-other_list">
      <td><code>other_list</code></td>
      <td>
        required.
        <p>
          The second list
        </p>
      </td>
    </tr>
  </tbody>
</table>


<a name="#my_namespace.min"></a>

## my_namespace.min

<pre>
my_namespace.min(<a href="#my_namespace.min-integers">integers</a>)
</pre>

Returns the minimum of given elements.

### Returns

The minimum integer in the given list.

### Parameters

<table class="params-table">
  <colgroup>
    <col class="col-param" />
    <col class="col-description" />
  </colgroup>
  <tbody>
    <tr id="my_namespace.min-integers">
      <td><code>integers</code></td>
      <td>
        required.
        <p>
          A list of integers. Must not be empty.
        </p>
      </td>
    </tr>
  </tbody>
</table>


<a name="#my_namespace.join_strings"></a>

## my_namespace.join_strings

<pre>
my_namespace.join_strings(<a href="#my_namespace.join_strings-strings">strings</a>, <a href="#my_namespace.join_strings-delimiter">delimiter</a>)
</pre>

Joins the given strings with a delimiter.

### Returns

The joined string.

### Parameters

<table class="params-table">
  <colgroup>
    <col class="col-param" />
    <col class="col-description" />
  </colgroup>
  <tbody>
    <tr id="my_namespace.join_strings-strings">
      <td><code>strings</code></td>
      <td>
        required.
        <p>
          A list of strings to join.
        </p>
      </td>
    </tr>
    <tr id="my_namespace.join_strings-delimiter">
      <td><code>delimiter</code></td>
      <td>
        optional. default is <code>", "</code>
        <p>
          The delimiter to use
        </p>
      </td>
    </tr>
  </tbody>
</table>


