Unverified Commit be393db7 authored by Johannes Kirschbauer's avatar Johannes Kirschbauer Committed by GitHub
Browse files

lib.takeEnd: init (#398222)

parents 246969a0 9fee9e73
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -279,6 +279,7 @@ let
        naturalSort
        compareLists
        take
        takeEnd
        drop
        dropEnd
        sublist
+34 −0
Original line number Diff line number Diff line
@@ -1462,6 +1462,40 @@ rec {
  */
  take = count: sublist 0 count;

  /**
    Return the last (at most) N elements of a list.

    # Inputs

    `count`

    : Maximum number of elements to pick

    `list`

    : Input list

    # Type

    ```
    takeEnd :: int -> [a] -> [a]
    ```

    # Examples
    :::{.example}
    ## `lib.lists.takeEnd` usage example

    ```nix
    takeEnd 2 [ "a" "b" "c" "d" ]
    => [ "c" "d" ]
    takeEnd 2 [ ]
    => [ ]
    ```

    :::
  */
  takeEnd = n: xs: drop (max 0 (length xs - n)) xs;

  /**
    Remove the first (at most) N elements of a list.

+63 −0
Original line number Diff line number Diff line
@@ -1357,6 +1357,69 @@ runTests {
    )
  ];

  testTakeEnd =
    let
      inherit (lib) takeEnd;
    in
    testAllTrue [
      (
        takeEnd 0 [
          1
          2
          3
        ] == [ ]
      )
      (
        takeEnd 1 [
          1
          2
          3
        ] == [ 3 ]
      )
      (
        takeEnd 2 [
          1
          2
          3
        ] == [
          2
          3
        ]
      )
      (
        takeEnd 3 [
          1
          2
          3
        ] == [
          1
          2
          3
        ]
      )
      (
        takeEnd 4 [
          1
          2
          3
        ] == [
          1
          2
          3
        ]
      )
      (takeEnd 0 [ ] == [ ])
      (takeEnd 1 [ ] == [ ])
      (
        takeEnd (-1) [
          1
          2
          3
        ] == [ ]
      )
      (takeEnd (-1) [ ] == [ ])
    ];

  testDrop =
    let
      inherit (lib) drop;