Skip to content

Enum.find_index/2 should return nil if the element is not found in a Stream #5004

@sunboshan

Description

@sunboshan

Environment

  • Elixir version:
$ elixir -v
Erlang/OTP 18 [erts-7.3] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Elixir 1.3.0
  • Operating system: Mac OSX 10.11

Current behavior

iex> Enum.take(1..3, 3) |> Enum.find_index(fn _ -> false end)
nil   # good

iex> Stream.take(1..3, 3) |> Enum.find_index(fn _ -> false end)  
3     # this seems like a bug, should be nil

iex> Stream.take(1..3, 4) |> Enum.find_index(fn _ -> false end) 
nil   # if stream take more than the original list, it works fine

iex> Stream.take_while(1..3, &(&1 <= 3)) |> Enum.find_index(fn _ -> false end) 
nil   # good

iex> Stream.take_while(1..3, &(&1 <= 2)) |> Enum.find_index(fn _ -> false end) 
2     # shoud be nil

iex> Stream.take_every(1..3, 1) |> Enum.find_index(fn _ -> false end) 
nil   # good

Expected behavior

iex> Stream.take(1..3, 3) |> Enum.find_index(fn _ -> false end)
nil

iex> Stream.take_while(1..3, &(&1 <= 2)) |> Enum.find_index(fn _ -> false end) 
nil

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions