use strict; use warnings; use Test::More; use Test::Differences; use Test::Exception; use autobox::Core; use lib "lib"; use autobox::Transform; use lib "t/lib"; use Literature; my $literature = Literature::literature(); my $authors = $literature->{authors}; subtest grep_by => sub { note "ArrayRef call, list context result"; eq_or_diff( [ map { $_->name } $authors->grep_by("is_prolific") ], [ "James A. Corey", ], "grep_by simple method call works", ); note "list call, list context result"; my @authors = @$authors; my $prolific_authors = @authors->grep_by("is_prolific"); eq_or_diff( [ map { $_->name } @$prolific_authors ], [ "James A. Corey", ], "grep_by simple method call works", ); }; subtest examples => sub { my $prolific_author_book_titles = $authors->grep_by("is_prolific") ->map_by("books")->flat ->map_by("title")->sort; eq_or_diff( $prolific_author_book_titles, [ "Caliban's War", "Leviathan Wakes" ], "prolific_author_book_titles", ); }; done_testing();