Skip to content

Map() throws panic on empty stream #59

@mykhailokulakov

Description

@mykhailokulakov

Describe the bug
Map() throws panic if stream is empty or was filtered out

To Reproduce
This code taken from examples. Just added Map():

package main

import (
	"strings"

	"github.com/wesovilabs/koazee"
)

type Person struct {
	Name string
	Male bool
	Age  int
}

var people = []*Person{
	{"John Smith", true, 32},
}

func main() {
	stream := koazee.
		StreamOf(people).
		Filter(func(person *Person) bool {
			return !person.Male
		}).
		Sort(func(person, otherPerson *Person) int {
			return strings.Compare(person.Name, otherPerson.Name)
		}).
		Map(func(person *Person) *string {
			return &person.Name
		})

	stream.Out().Val()
}

Expected behavior
Should be no errors. Map() shall be skipped for empty streams

Current behaviour

panic: reflect: slice index out of range

goroutine 1 [running]:
reflect.Value.Index(0x65e9a0, 0xc000004540, 0x97, 0x0, 0x65d860, 0x196, 0x2030000)
	***/go/src/reflect/value.go:939 +0x1ee
github.com/wesovilabs/koazee/internal/maps.(*Map).validate(0xc00007b9b8, 0x40c801, 0xc68bff426f1e59c0)
	***/go/pkg/mod/github.com/wesovilabs/[email protected]/internal/maps/map.go:91 +0x817
github.com/wesovilabs/koazee/internal/maps.(*Map).Run(0xc00007b9b8, 0x4985b8, 0xc00007b968, 0x6e7d50, 0x0)
	***/go/pkg/mod/github.com/wesovilabs/[email protected]/internal/maps/map.go:21 +0x4a
github.com/wesovilabs/koazee/stream.(*streamMap).run(0xc000044220, 0x65e9a0, 0xc000004540, 0x65e9a0, 0xc000004540, 0x97, 0x717a00, 0x6549a0, 0x0, 0x0, ...)
	***/go/pkg/mod/github.com/wesovilabs/[email protected]/stream/map.go:13 +0xff
github.com/wesovilabs/koazee/stream.Stream.run(0x65e9a0, 0xc000004540, 0x65e9a0, 0xc000004540, 0x97, 0x717a00, 0x6549a0, 0x0, 0x0, 0xc00014e020, ...)
	***/go/pkg/mod/github.com/wesovilabs/[email protected]/stream/stream.go:162 +0xa0
github.com/wesovilabs/koazee/stream.Stream.run(0x65e9a0, 0xc000004540, 0x65e9a0, 0xc000004540, 0x97, 0x717a00, 0x6549a0, 0x0, 0x0, 0xc00014e020, ...)
	***/go/pkg/mod/github.com/wesovilabs/[email protected]/stream/stream.go:167 +0x13a
github.com/wesovilabs/koazee/stream.Stream.run(0x65e9a0, 0xc000004540, 0x65e9a0, 0xc000004540, 0x97, 0x717a00, 0x6549a0, 0x0, 0x0, 0xc00014e010, ...)
	***/go/pkg/mod/github.com/wesovilabs/[email protected]/stream/stream.go:167 +0x13a
github.com/wesovilabs/koazee/stream.Stream.Out(0x65e9a0, 0xc0000044a0, 0x65e9a0, 0xc0000044a0, 0x97, 0x717a00, 0x6549a0, 0x1, 0x0, 0xc00014e000, ...)
	***/go/pkg/mod/github.com/wesovilabs/[email protected]/stream/out.go:35 +0x5c
main.main()
	***/main.go:32 +0x28c

Process finished with exit code 2

Version - v0.0.5

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions