Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
Loading...
Searching...
No Matches
dynliststack_test.cc File Reference

Comprehensive test suite for DynListStack<T> More...

#include <gtest/gtest.h>
#include <string>
#include <memory>
#include <vector>
#include <stdexcept>
#include <sstream>
#include <tpl_dynListStack.H>
#include <ahFunctional.H>
Include dependency graph for dynliststack_test.cc:

Go to the source code of this file.

Classes

struct  SimpleStack
 Fixture with a stack of integers. More...
 
struct  ComplexStack
 Fixture with a stack of complex objects (DynList<int>) More...
 
struct  StringStack
 Fixture with a stack of strings. More...
 
struct  MoveOnly
 Move-only type for testing move semantics. More...
 
struct  Counted
 Type that counts constructions/destructions. More...
 
struct  ThrowOnCopy
 

Functions

 TEST (DynListStack, default_constructor_creates_empty_stack)
 
 TEST (DynListStack, default_constructor_with_various_types)
 
 TEST (DynListStack, initializer_list_constructor)
 
 TEST (DynListStack, initializer_list_empty)
 
 TEST (DynListStack, initializer_list_with_strings)
 
 TEST_F (SimpleStack, copy_constructor_creates_independent_copy)
 
 TEST_F (SimpleStack, copy_constructor_preserves_order)
 
 TEST (DynListStack, copy_constructor_empty_stack)
 
 TEST_F (ComplexStack, copy_constructor_deep_copies_elements)
 
 TEST_F (SimpleStack, move_constructor_transfers_ownership)
 
 TEST (DynListStack, move_constructor_empty_stack)
 
 TEST (DynListStack, move_constructor_with_move_only_type)
 
 TEST_F (SimpleStack, copy_assignment_replaces_contents)
 
 TEST_F (SimpleStack, copy_assignment_self_assignment_is_safe)
 
 TEST (DynListStack, copy_assignment_to_empty_stack)
 
 TEST (DynListStack, copy_assignment_from_empty_stack)
 
 TEST_F (SimpleStack, move_assignment_transfers_ownership)
 
 TEST_F (SimpleStack, move_assignment_roundtrip_is_safe)
 
 TEST_F (SimpleStack, swap_exchanges_contents)
 
 TEST (DynListStack, swap_with_empty_stack)
 
 TEST (DynListStack, swap_is_noexcept)
 
 TEST (DynListStack, push_by_copy)
 
 TEST (DynListStack, push_by_move)
 
 TEST (DynListStack, push_returns_reference_to_inserted_element)
 
 TEST (DynListStack, push_multiple_elements_maintains_lifo_order)
 
 TEST (DynListStack, emplace_constructs_in_place)
 
 TEST (DynListStack, emplace_with_multiple_arguments)
 
 TEST (DynListStack, emplace_returns_reference)
 
 TEST_F (SimpleStack, pop_removes_and_returns_top)
 
 TEST (DynListStack, pop_on_empty_stack_throws)
 
 TEST (DynListStack, pop_until_empty)
 
 TEST (DynListStack, pop_with_move_only_type)
 
 TEST_F (SimpleStack, top_returns_reference_to_top_element)
 
 TEST_F (SimpleStack, top_const_returns_const_reference)
 
 TEST (DynListStack, top_on_empty_stack_throws)
 
 TEST (DynListStack, top_const_on_empty_stack_throws)
 
 TEST_F (SimpleStack, peek_is_alias_for_top)
 
 TEST_F (SimpleStack, peek_const_is_alias_for_top_const)
 
 TEST_F (SimpleStack, get_is_alias_for_pop)
 
 TEST (DynListStack, get_on_empty_stack_throws)
 
 TEST (DynListStack, size_is_zero_for_empty_stack)
 
 TEST_F (SimpleStack, size_reflects_number_of_elements)
 
 TEST (DynListStack, is_empty_true_for_new_stack)
 
 TEST_F (SimpleStack, is_empty_false_for_non_empty_stack)
 
 TEST (DynListStack, is_empty_after_all_elements_removed)
 
 TEST_F (SimpleStack, empty_removes_all_elements)
 
 TEST (DynListStack, empty_on_empty_stack_is_safe)
 
 TEST_F (SimpleStack, clear_is_alias_for_empty)
 
 TEST (DynListStack, empty_is_noexcept)
 
 TEST (DynListStack, clear_is_noexcept)
 
 TEST (DynListStack, put_is_alias_for_push)
 
 TEST (DynListStack, insert_is_alias_for_push)
 
 TEST (DynListStack, append_is_alias_for_push)
 
 TEST_F (SimpleStack, search_finds_existing_element)
 
 TEST_F (SimpleStack, search_returns_nullptr_for_missing_element)
 
 TEST (DynListStack, search_on_empty_stack_returns_nullptr)
 
 TEST_F (SimpleStack, search_const_version)
 
 TEST_F (StringStack, search_with_string_type)
 
 TEST_F (SimpleStack, contains_returns_true_for_existing_element)
 
 TEST_F (SimpleStack, contains_returns_false_for_missing_element)
 
 TEST (DynListStack, contains_on_empty_stack)
 
 TEST_F (SimpleStack, has_is_alias_for_contains)
 
 TEST (DynListStack, iterator_on_empty_stack)
 
 TEST_F (SimpleStack, iterator_traverses_in_lifo_order)
 
 TEST_F (SimpleStack, iterator_count_matches_size)
 
 TEST_F (SimpleStack, range_based_for_loop)
 
 TEST_F (ComplexStack, iterator_with_complex_type)
 
 TEST_F (SimpleStack, traverse_visits_all_elements)
 
 TEST_F (SimpleStack, traverse_can_stop_early)
 
 TEST_F (SimpleStack, traverse_visits_in_lifo_order)
 
 TEST (DynListStack, traverse_on_empty_stack)
 
 TEST_F (SimpleStack, traverse_const_version)
 
 TEST_F (SimpleStack, maps_transforms_elements)
 
 TEST_F (SimpleStack, maps_to_different_type)
 
 TEST_F (SimpleStack, filter_selects_matching_elements)
 
 TEST_F (SimpleStack, filter_returns_empty_when_none_match)
 
 TEST_F (SimpleStack, foldl_accumulates_values)
 
 TEST_F (SimpleStack, foldl_with_different_accumulator_type)
 
 TEST_F (SimpleStack, all_returns_true_when_all_match)
 
 TEST_F (SimpleStack, all_returns_false_when_any_fails)
 
 TEST_F (SimpleStack, exists_returns_true_when_any_matches)
 
 TEST_F (SimpleStack, exists_returns_false_when_none_match)
 
 TEST_F (SimpleStack, for_each_visits_all_elements)
 
 TEST (DynListStack, type_aliases_are_correct)
 
 TEST (DynListStack, destructor_frees_all_memory)
 
 TEST (DynListStack, clear_destroys_all_elements)
 
 TEST (DynListStack, push_move_only_type)
 
 TEST (DynListStack, move_semantics_avoid_copies)
 
 TEST (DynListStack, single_element_stack)
 
 TEST (DynListStack, repeated_push_pop_cycles)
 
 TEST (DynListStack, interleaved_push_pop)
 
 TEST (DynListStack, stress_large_number_of_elements)
 
 TEST (DynListStack, stress_with_strings)
 
 TEST (DynListStack, stress_copy_large_stack)
 
 TEST (DynListStack, exception_safety_on_push_copy)
 
 TEST (DynListStack, compatible_with_algorithm_patterns)
 
 TEST (DynListStack, regression_size_after_move)
 
 TEST (DynListStack, regression_iterator_after_modification)
 
int main (int argc, char **argv)
 

Variables

constexpr size_t N = 17
 
constexpr size_t LARGE_N = 10000
 

Detailed Description

Comprehensive test suite for DynListStack<T>

This test file provides exhaustive coverage of DynListStack functionality:

  • Basic operations (push, pop, top, size, is_empty)
  • Constructors (default, copy, move, initializer_list)
  • Assignment operators (copy, move)
  • Memory management and exception safety
  • Iterator functionality
  • Functional methods (traverse, maps, filter, foldl, etc.)
  • Edge cases and boundary conditions
  • Performance characteristics

Definition in file dynliststack_test.cc.

Function Documentation

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 1332 of file dynliststack_test.cc.

References Aleph::maps().

◆ TEST() [1/53]

◆ TEST() [2/53]

◆ TEST() [3/53]

TEST ( DynListStack  ,
clear_is_noexcept   
)

Definition at line 721 of file dynliststack_test.cc.

References Aleph::DynListStack< T >::clear(), and Aleph::maps().

◆ TEST() [4/53]

TEST ( DynListStack  ,
compatible_with_algorithm_patterns   
)

◆ TEST() [5/53]

TEST ( DynListStack  ,
contains_on_empty_stack   
)

Definition at line 833 of file dynliststack_test.cc.

References Aleph::DynListStack< T >::contains(), and Aleph::maps().

◆ TEST() [6/53]

TEST ( DynListStack  ,
copy_assignment_from_empty_stack   
)

Definition at line 360 of file dynliststack_test.cc.

References Aleph::HTList::is_empty(), and Aleph::maps().

◆ TEST() [7/53]

TEST ( DynListStack  ,
copy_assignment_to_empty_stack   
)

◆ TEST() [8/53]

TEST ( DynListStack  ,
copy_constructor_empty_stack   
)

Definition at line 267 of file dynliststack_test.cc.

References Aleph::copy(), and Aleph::maps().

◆ TEST() [9/53]

TEST ( DynListStack  ,
default_constructor_creates_empty_stack   
)

◆ TEST() [10/53]

TEST ( DynListStack  ,
default_constructor_with_various_types   
)

Definition at line 192 of file dynliststack_test.cc.

References Aleph::HTList::is_empty(), and Aleph::maps().

◆ TEST() [11/53]

TEST ( DynListStack  ,
destructor_frees_all_memory   
)

◆ TEST() [12/53]

TEST ( DynListStack  ,
emplace_constructs_in_place   
)

◆ TEST() [13/53]

TEST ( DynListStack  ,
emplace_returns_reference   
)

◆ TEST() [14/53]

TEST ( DynListStack  ,
emplace_with_multiple_arguments   
)

◆ TEST() [15/53]

TEST ( DynListStack  ,
empty_is_noexcept   
)

Definition at line 715 of file dynliststack_test.cc.

References Aleph::DynListStack< T >::empty(), and Aleph::maps().

◆ TEST() [16/53]

TEST ( DynListStack  ,
empty_on_empty_stack_is_safe   
)

◆ TEST() [17/53]

◆ TEST() [18/53]

TEST ( DynListStack  ,
get_on_empty_stack_throws   
)

Definition at line 634 of file dynliststack_test.cc.

References Aleph::DynListStack< T >::get(), and Aleph::maps().

◆ TEST() [19/53]

TEST ( DynListStack  ,
initializer_list_constructor   
)

◆ TEST() [20/53]

TEST ( DynListStack  ,
initializer_list_empty   
)

◆ TEST() [21/53]

TEST ( DynListStack  ,
initializer_list_with_strings   
)

◆ TEST() [22/53]

◆ TEST() [23/53]

◆ TEST() [24/53]

TEST ( DynListStack  ,
is_empty_after_all_elements_removed   
)

◆ TEST() [25/53]

TEST ( DynListStack  ,
is_empty_true_for_new_stack   
)

Definition at line 662 of file dynliststack_test.cc.

References Aleph::DynListStack< T >::is_empty(), and Aleph::maps().

◆ TEST() [26/53]

TEST ( DynListStack  ,
iterator_on_empty_stack   
)

◆ TEST() [27/53]

TEST ( DynListStack  ,
move_constructor_empty_stack   
)

◆ TEST() [28/53]

TEST ( DynListStack  ,
move_constructor_with_move_only_type   
)

◆ TEST() [29/53]

TEST ( DynListStack  ,
move_semantics_avoid_copies   
)

◆ TEST() [30/53]

TEST ( DynListStack  ,
pop_on_empty_stack_throws   
)

Definition at line 547 of file dynliststack_test.cc.

References Aleph::maps(), and Aleph::DynListStack< T >::pop().

◆ TEST() [31/53]

TEST ( DynListStack  ,
pop_until_empty   
)

◆ TEST() [32/53]

◆ TEST() [33/53]

◆ TEST() [34/53]

◆ TEST() [35/53]

◆ TEST() [36/53]

TEST ( DynListStack  ,
push_multiple_elements_maintains_lifo_order   
)

◆ TEST() [37/53]

TEST ( DynListStack  ,
push_returns_reference_to_inserted_element   
)

◆ TEST() [38/53]

◆ TEST() [39/53]

TEST ( DynListStack  ,
regression_iterator_after_modification   
)

◆ TEST() [40/53]

TEST ( DynListStack  ,
regression_size_after_move   
)

◆ TEST() [41/53]

◆ TEST() [42/53]

TEST ( DynListStack  ,
search_on_empty_stack_returns_nullptr   
)

Definition at line 788 of file dynliststack_test.cc.

References Aleph::maps(), and Aleph::DynListStack< T >::search().

◆ TEST() [43/53]

◆ TEST() [44/53]

TEST ( DynListStack  ,
size_is_zero_for_empty_stack   
)

Definition at line 644 of file dynliststack_test.cc.

References Aleph::maps(), and Aleph::DynListStack< T >::size().

◆ TEST() [45/53]

◆ TEST() [46/53]

◆ TEST() [47/53]

◆ TEST() [48/53]

TEST ( DynListStack  ,
swap_is_noexcept   
)

Definition at line 431 of file dynliststack_test.cc.

References Aleph::maps(), and Aleph::DynList< T >::swap().

◆ TEST() [49/53]

◆ TEST() [50/53]

TEST ( DynListStack  ,
top_const_on_empty_stack_throws   
)

Definition at line 602 of file dynliststack_test.cc.

References Aleph::maps(), and Aleph::DynListStack< T >::top().

◆ TEST() [51/53]

TEST ( DynListStack  ,
top_on_empty_stack_throws   
)

Definition at line 595 of file dynliststack_test.cc.

References Aleph::maps(), and Aleph::DynListStack< T >::top().

◆ TEST() [52/53]

TEST ( DynListStack  ,
traverse_on_empty_stack   
)

Definition at line 937 of file dynliststack_test.cc.

References Aleph::maps(), and Aleph::DynListStack< T >::traverse().

◆ TEST() [53/53]

TEST ( DynListStack  ,
type_aliases_are_correct   
)

Definition at line 1054 of file dynliststack_test.cc.

References Aleph::maps().

◆ TEST_F() [1/45]

TEST_F ( ComplexStack  ,
copy_constructor_deep_copies_elements   
)

Definition at line 276 of file dynliststack_test.cc.

References Aleph::copy(), and Aleph::maps().

◆ TEST_F() [2/45]

TEST_F ( ComplexStack  ,
iterator_with_complex_type   
)

◆ TEST_F() [3/45]

TEST_F ( SimpleStack  ,
all_returns_false_when_any_fails   
)

Definition at line 1023 of file dynliststack_test.cc.

References Aleph::maps().

◆ TEST_F() [4/45]

TEST_F ( SimpleStack  ,
all_returns_true_when_all_match   
)

Definition at line 1017 of file dynliststack_test.cc.

References Aleph::maps().

◆ TEST_F() [5/45]

TEST_F ( SimpleStack  ,
clear_is_alias_for_empty   
)

Definition at line 707 of file dynliststack_test.cc.

References Aleph::maps().

◆ TEST_F() [6/45]

TEST_F ( SimpleStack  ,
contains_returns_false_for_missing_element   
)

Definition at line 826 of file dynliststack_test.cc.

References Aleph::maps().

◆ TEST_F() [7/45]

TEST_F ( SimpleStack  ,
contains_returns_true_for_existing_element   
)

Definition at line 819 of file dynliststack_test.cc.

References Aleph::maps().

◆ TEST_F() [8/45]

TEST_F ( SimpleStack  ,
copy_assignment_replaces_contents   
)

◆ TEST_F() [9/45]

TEST_F ( SimpleStack  ,
copy_assignment_self_assignment_is_safe   
)

Definition at line 341 of file dynliststack_test.cc.

References Aleph::maps().

◆ TEST_F() [10/45]

TEST_F ( SimpleStack  ,
copy_constructor_creates_independent_copy   
)

Definition at line 242 of file dynliststack_test.cc.

References Aleph::copy(), and Aleph::maps().

◆ TEST_F() [11/45]

TEST_F ( SimpleStack  ,
copy_constructor_preserves_order   
)

Definition at line 255 of file dynliststack_test.cc.

References Aleph::copy(), and Aleph::maps().

◆ TEST_F() [12/45]

TEST_F ( SimpleStack  ,
empty_removes_all_elements   
)

Definition at line 688 of file dynliststack_test.cc.

References Aleph::maps().

◆ TEST_F() [13/45]

TEST_F ( SimpleStack  ,
exists_returns_false_when_none_match   
)

Definition at line 1035 of file dynliststack_test.cc.

References Aleph::maps().

◆ TEST_F() [14/45]

TEST_F ( SimpleStack  ,
exists_returns_true_when_any_matches   
)

Definition at line 1029 of file dynliststack_test.cc.

References Aleph::maps().

◆ TEST_F() [15/45]

TEST_F ( SimpleStack  ,
filter_returns_empty_when_none_match   
)

◆ TEST_F() [16/45]

TEST_F ( SimpleStack  ,
filter_selects_matching_elements   
)

◆ TEST_F() [17/45]

TEST_F ( SimpleStack  ,
foldl_accumulates_values   
)

Definition at line 999 of file dynliststack_test.cc.

References Aleph::maps(), and Aleph::sum().

◆ TEST_F() [18/45]

TEST_F ( SimpleStack  ,
foldl_with_different_accumulator_type   
)

Definition at line 1007 of file dynliststack_test.cc.

References Aleph::maps(), and Aleph::to_string().

◆ TEST_F() [19/45]

TEST_F ( SimpleStack  ,
for_each_visits_all_elements   
)

Definition at line 1041 of file dynliststack_test.cc.

References Aleph::maps(), and Aleph::sum().

◆ TEST_F() [20/45]

TEST_F ( SimpleStack  ,
get_is_alias_for_pop   
)

◆ TEST_F() [21/45]

TEST_F ( SimpleStack  ,
has_is_alias_for_contains   
)

Definition at line 839 of file dynliststack_test.cc.

References Aleph::maps().

◆ TEST_F() [22/45]

TEST_F ( SimpleStack  ,
is_empty_false_for_non_empty_stack   
)

Definition at line 668 of file dynliststack_test.cc.

References Aleph::maps().

◆ TEST_F() [23/45]

TEST_F ( SimpleStack  ,
iterator_count_matches_size   
)

Definition at line 867 of file dynliststack_test.cc.

References Aleph::count(), and Aleph::maps().

◆ TEST_F() [24/45]

TEST_F ( SimpleStack  ,
iterator_traverses_in_lifo_order   
)

Definition at line 859 of file dynliststack_test.cc.

References Aleph::maps().

◆ TEST_F() [25/45]

TEST_F ( SimpleStack  ,
maps_to_different_type   
)

◆ TEST_F() [26/45]

◆ TEST_F() [27/45]

TEST_F ( SimpleStack  ,
move_assignment_roundtrip_is_safe   
)

Definition at line 389 of file dynliststack_test.cc.

References Aleph::maps(), and Aleph::HTList::size().

◆ TEST_F() [28/45]

TEST_F ( SimpleStack  ,
move_assignment_transfers_ownership   
)

◆ TEST_F() [29/45]

TEST_F ( SimpleStack  ,
move_constructor_transfers_ownership   
)

◆ TEST_F() [30/45]

TEST_F ( SimpleStack  ,
peek_const_is_alias_for_top_const   
)

Definition at line 615 of file dynliststack_test.cc.

References Aleph::maps(), and Aleph::DynList< T >::top().

◆ TEST_F() [31/45]

TEST_F ( SimpleStack  ,
peek_is_alias_for_top   
)

Definition at line 609 of file dynliststack_test.cc.

References Aleph::maps().

◆ TEST_F() [32/45]

TEST_F ( SimpleStack  ,
pop_removes_and_returns_top   
)

◆ TEST_F() [33/45]

TEST_F ( SimpleStack  ,
range_based_for_loop   
)

Definition at line 876 of file dynliststack_test.cc.

References Aleph::maps().

◆ TEST_F() [34/45]

TEST_F ( SimpleStack  ,
search_const_version   
)

Definition at line 795 of file dynliststack_test.cc.

References Aleph::maps().

◆ TEST_F() [35/45]

TEST_F ( SimpleStack  ,
search_finds_existing_element   
)

Definition at line 773 of file dynliststack_test.cc.

References Aleph::maps().

◆ TEST_F() [36/45]

TEST_F ( SimpleStack  ,
search_returns_nullptr_for_missing_element   
)

Definition at line 781 of file dynliststack_test.cc.

References Aleph::maps().

◆ TEST_F() [37/45]

TEST_F ( SimpleStack  ,
size_reflects_number_of_elements   
)

Definition at line 650 of file dynliststack_test.cc.

References Aleph::maps().

◆ TEST_F() [38/45]

TEST_F ( SimpleStack  ,
swap_exchanges_contents   
)

◆ TEST_F() [39/45]

TEST_F ( SimpleStack  ,
top_const_returns_const_reference   
)

Definition at line 588 of file dynliststack_test.cc.

References Aleph::maps(), and Aleph::DynList< T >::top().

◆ TEST_F() [40/45]

TEST_F ( SimpleStack  ,
top_returns_reference_to_top_element   
)

Definition at line 580 of file dynliststack_test.cc.

References Aleph::maps().

◆ TEST_F() [41/45]

TEST_F ( SimpleStack  ,
traverse_can_stop_early   
)

Definition at line 913 of file dynliststack_test.cc.

References Aleph::count(), and Aleph::maps().

◆ TEST_F() [42/45]

TEST_F ( SimpleStack  ,
traverse_const_version   
)

◆ TEST_F() [43/45]

TEST_F ( SimpleStack  ,
traverse_visits_all_elements   
)

Definition at line 904 of file dynliststack_test.cc.

References Aleph::count(), and Aleph::maps().

◆ TEST_F() [44/45]

TEST_F ( SimpleStack  ,
traverse_visits_in_lifo_order   
)

Definition at line 926 of file dynliststack_test.cc.

References Aleph::maps().

◆ TEST_F() [45/45]

TEST_F ( StringStack  ,
search_with_string_type   
)

Definition at line 805 of file dynliststack_test.cc.

References Aleph::maps().

Variable Documentation

◆ LARGE_N

constexpr size_t LARGE_N = 10000
constexpr

Definition at line 68 of file dynliststack_test.cc.

Referenced by TEST(), TEST(), TEST(), and TEST().

◆ N

constexpr size_t N = 17
constexpr

Definition at line 67 of file dynliststack_test.cc.