[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [lmi] master b98f9ac 1/3: Rename some pagination members
From: |
Greg Chicares |
Subject: |
[lmi-commits] [lmi] master b98f9ac 1/3: Rename some pagination members |
Date: |
Sun, 23 Sep 2018 20:04:33 -0400 (EDT) |
branch: master
commit b98f9ac4b8635490fe184ce7fb9131b079cdb556
Author: Gregory W. Chicares <address@hidden>
Commit: Gregory W. Chicares <address@hidden>
Rename some pagination members
---
report_table.cpp | 58 +++++++++++--------
report_table.hpp | 22 ++++---
report_table_test.cpp | 156 +++++++++++++++++++++++++++-----------------------
3 files changed, 131 insertions(+), 105 deletions(-)
diff --git a/report_table.cpp b/report_table.cpp
index abb930f..618c7ec 100644
--- a/report_table.cpp
+++ b/report_table.cpp
@@ -182,10 +182,16 @@ namespace
std::logic_error yikes("Rows per group must be positive.");
} // Unnamed namespace.
-/// Preconditions: 0 <= total_rows && 0 < rows_per_group <= max_lines_per_page
+/// Asserted preconditions:
+/// 0 <= number_of_rows
+/// 0 < rows_per_group <= max_lines_per_page
-prepaginator::prepaginator(int total_rows, int rows_per_group, int
max_lines_per_page)
- :total_rows_ {total_rows}
+prepaginator::prepaginator
+ (int number_of_rows
+ ,int rows_per_group
+ ,int max_lines_per_page
+ )
+ :number_of_rows_ {number_of_rows}
,rows_per_group_ {0 < rows_per_group ? rows_per_group : throw yikes}
,max_lines_per_page_ {max_lines_per_page}
// "+ 1": blank-line separator after each group.
@@ -196,58 +202,62 @@ prepaginator::prepaginator(int total_rows, int
rows_per_group, int max_lines_per
// "-1 +": no blank-line separator after the last group.
,lines_on_full_page_ {-1 + lines_per_group_ * groups_per_page_}
,lines_on_last_page_ {}
- ,page_count_ {}
+ ,number_of_pages_ {}
{
- LMI_ASSERT(0 <= total_rows);
+ LMI_ASSERT(0 <= number_of_rows);
LMI_ASSERT(0 < rows_per_group );
LMI_ASSERT( rows_per_group <= max_lines_per_page);
- page_count_ = outward_quotient(total_rows_, rows_per_page_);
+ number_of_pages_ = outward_quotient(number_of_rows_, rows_per_page_);
- int const pages_before_last = (0 == page_count_) ? 0 : page_count_ - 1;
- int const rows_on_last_page = total_rows_ - rows_per_page_ *
pages_before_last;
+ int const pages_before_last = (0 == number_of_pages_) ? 0 :
number_of_pages_ - 1;
+ int const rows_on_last_page = number_of_rows_ - rows_per_page_ *
pages_before_last;
int const full_groups_on_last_page = rows_on_last_page / rows_per_group_;
- int const extra_rows_on_last_page = rows_on_last_page % rows_per_group_;
+ int const odd_rows_on_last_page = rows_on_last_page % rows_per_group_;
lines_on_last_page_ =
lines_per_group_ * full_groups_on_last_page
- + extra_rows_on_last_page
+ + odd_rows_on_last_page
- ( 0 != full_groups_on_last_page // (there is a separator
- && 0 == extra_rows_on_last_page // and it is not wanted)
+ && 0 == odd_rows_on_last_page // and it is not wanted)
)
;
// Avoid widowing a partial group on the last page, by moving it
// to the preceding page (which becomes the last) if there's room.
- if(1 < page_count_)
+ if(1 < number_of_pages_)
{
int const free_lines = max_lines_per_page_ - lines_per_group_ *
groups_per_page_;
LMI_ASSERT(free_lines < rows_per_group_);
if(rows_on_last_page <= free_lines)
{
- --page_count_;
+ --number_of_pages_;
// "+ 1": separator before antiwidowed partial group.
lines_on_last_page_ = lines_on_full_page_ + 1 + rows_on_last_page;
}
}
// If there are zero rows of data, then one empty page is wanted.
- if(0 == total_rows_)
+ if(0 == number_of_rows_)
{
- page_count_ = 1;
+ number_of_pages_ = 1;
}
}
-int paginator::init(int total_rows, int rows_per_group, int max_lines_per_page)
+int paginator::init
+ (int number_of_rows
+ ,int rows_per_group
+ ,int max_lines_per_page
+ )
{
- total_rows_ = total_rows ;
- rows_per_group_ = rows_per_group ;
+ number_of_rows_ = number_of_rows;
+ rows_per_group_ = rows_per_group;
- prepaginator p(total_rows, rows_per_group, max_lines_per_page);
+ prepaginator p(number_of_rows, rows_per_group, max_lines_per_page);
lines_on_full_page_ = p.lines_on_full_page();
lines_on_last_page_ = p.lines_on_last_page();
- page_count_ = p.page_count();
+ number_of_pages_ = p.number_of_pages();
- return page_count_;
+ return number_of_pages_;
}
void paginator::print()
@@ -255,10 +265,10 @@ void paginator::print()
prelude();
int row = 0;
int line_count = 0;
- for(int page = 0; page < page_count(); ++page)
+ for(int page = 0; page < number_of_pages(); ++page)
{
int const max_lines =
- ((page_count() - 1) == page)
+ ((number_of_pages() - 1) == page)
? lines_on_last_page()
: lines_on_full_page()
;
@@ -279,5 +289,5 @@ void paginator::print()
close_page();
}
postlude();
- LMI_ASSERT(total_rows() == row);
+ LMI_ASSERT(number_of_rows() == row);
}
diff --git a/report_table.hpp b/report_table.hpp
index fb1191b..1ca2c5a 100644
--- a/report_table.hpp
+++ b/report_table.hpp
@@ -148,15 +148,19 @@ std::vector<int> LMI_SO set_column_widths
class LMI_SO prepaginator
{
public:
- prepaginator(int total_rows, int rows_per_group, int max_lines_per_page);
+ prepaginator
+ (int number_of_rows
+ ,int rows_per_group
+ ,int max_lines_per_page
+ );
int lines_on_full_page() const {return lines_on_full_page_;}
int lines_on_last_page() const {return lines_on_last_page_;}
- int page_count () const {return page_count_ ;}
+ int number_of_pages () const {return number_of_pages_ ;}
private:
// Ctor arguments.
- int const total_rows_;
+ int const number_of_rows_;
int const rows_per_group_;
int const max_lines_per_page_;
@@ -166,7 +170,7 @@ class LMI_SO prepaginator
int const rows_per_page_;
int const lines_on_full_page_;
int lines_on_last_page_;
- int page_count_;
+ int number_of_pages_;
};
class LMI_SO paginator
@@ -174,7 +178,7 @@ class LMI_SO paginator
public:
paginator() {}
- int init(int total_rows, int rows_per_group, int max_lines_per_page);
+ int init(int number_of_rows, int rows_per_group, int max_lines_per_page);
void print();
private:
@@ -185,21 +189,21 @@ class LMI_SO paginator
virtual void close_page () = 0;
virtual void postlude () = 0;
- int total_rows () const {return total_rows_ ;}
+ int number_of_rows () const {return number_of_rows_ ;}
int rows_per_group () const {return rows_per_group_ ;}
int lines_on_full_page() const {return lines_on_full_page_;}
int lines_on_last_page() const {return lines_on_last_page_;}
- int page_count () const {return page_count_ ;}
+ int number_of_pages () const {return number_of_pages_ ;}
// init() arguments.
- int total_rows_ {};
+ int number_of_rows_ {};
int rows_per_group_ {};
// init() results.
int lines_on_full_page_ {};
int lines_on_last_page_ {};
- int page_count_ {};
+ int number_of_pages_ {};
};
#endif // report_table_hpp
diff --git a/report_table_test.cpp b/report_table_test.cpp
index 3b6bb05..81b7e8f 100644
--- a/report_table_test.cpp
+++ b/report_table_test.cpp
@@ -401,12 +401,12 @@ void
report_table_test::test_column_widths_for_illustrations()
}
}
-class paginate_demo : public paginator
+class pagination_demo : public paginator
{
public:
- paginate_demo() {}
+ pagination_demo() {}
- int test_p(int total_rows, int rows_per_group, int max_lines_per_page);
+ int test(int number_of_rows, int rows_per_group, int max_lines_per_page);
std::string str() const;
@@ -425,9 +425,17 @@ class paginate_demo : public paginator
mutable int demo_row_ {0};
};
-int paginate_demo::test_p(int total_rows, int rows_per_group, int
max_lines_per_page)
+int pagination_demo::test
+ (int number_of_rows
+ ,int rows_per_group
+ ,int max_lines_per_page
+ )
{
- int page_count = init(total_rows, rows_per_group, max_lines_per_page);
+ int const number_of_pages = init
+ (number_of_rows
+ ,rows_per_group
+ ,max_lines_per_page
+ );
oss_.str("");
oss_.clear();
demo_page_ = 0;
@@ -435,25 +443,25 @@ int paginate_demo::test_p(int total_rows, int
rows_per_group, int max_lines_per_
demo_line_count_ = 0;
demo_row_ = 0;
print();
- return page_count;
+ return number_of_pages;
}
-std::string paginate_demo::str() const
+std::string pagination_demo::str() const
{
return oss_.str();
}
-void paginate_demo::prelude()
+void pagination_demo::prelude()
{
oss_ << "Paginated table demonstration begins...\n";
}
-void paginate_demo::open_page()
+void pagination_demo::open_page()
{
oss_ << "Page " << demo_page_ << '\n';
}
-void paginate_demo::print_a_data_row()
+void pagination_demo::print_a_data_row()
{
oss_
<< " page " << std::setw(3) << demo_page_
@@ -467,7 +475,7 @@ void paginate_demo::print_a_data_row()
++demo_row_;
}
-void paginate_demo::print_a_separator()
+void pagination_demo::print_a_separator()
{
oss_
<< " page " << std::setw(3) << demo_page_
@@ -479,21 +487,25 @@ void paginate_demo::print_a_separator()
++demo_line_count_;
}
-void paginate_demo::close_page()
+void pagination_demo::close_page()
{
demo_line_ = 0;
++demo_page_;
}
-void paginate_demo::postlude()
+void pagination_demo::postlude()
{
oss_ << "...paginated table demonstration ends.\n";
}
-std::string test_paginate(int total_rows, int rows_per_group, int
max_lines_per_page)
+std::string test_pagination
+ (int number_of_rows
+ ,int rows_per_group
+ ,int max_lines_per_page
+ )
{
- paginate_demo z;
- z.init(total_rows, rows_per_group, max_lines_per_page);
+ pagination_demo z;
+ z.init(number_of_rows, rows_per_group, max_lines_per_page);
z.print();
return z.str();
}
@@ -501,125 +513,125 @@ std::string test_paginate(int total_rows, int
rows_per_group, int max_lines_per_
void report_table_test::test_paginator()
{
// Instead of testing classes prepaginator or paginator directly,
- // use paginate_demo::test_p(), which instantiates paginator (and
+ // use pagination_demo::test(), which instantiates paginator (and
// hence prepaginator) and exercises other code as well before
// returning the page count.
- paginate_demo p;
+ pagination_demo p;
// Original tests: vary only the number of data rows.
// Edge cases.
// Arguably zero rows should mean zero pages.
- BOOST_TEST_EQUAL(1, p.test_p( 0, 5, 28));
- BOOST_TEST_EQUAL(1, p.test_p( 1, 5, 28));
- // Just a trivial sanity test_p.
- BOOST_TEST_EQUAL(1, p.test_p(17, 5, 28));
+ BOOST_TEST_EQUAL(1, p.test( 0, 5, 28));
+ BOOST_TEST_EQUAL(1, p.test( 1, 5, 28));
+ // Just a trivial sanity test.
+ BOOST_TEST_EQUAL(1, p.test(17, 5, 28));
// 4 full groups + incomplete last group.
- BOOST_TEST_EQUAL(1, p.test_p(24, 5, 28));
+ BOOST_TEST_EQUAL(1, p.test(24, 5, 28));
// 5 full groups don't fit on one page.
- BOOST_TEST_EQUAL(2, p.test_p(25, 5, 28));
+ BOOST_TEST_EQUAL(2, p.test(25, 5, 28));
// 4 + 4 groups + incomplete last one.
- BOOST_TEST_EQUAL(2, p.test_p(44, 5, 28));
+ BOOST_TEST_EQUAL(2, p.test(44, 5, 28));
// 9 full groups don't fit on two pages.
- BOOST_TEST_EQUAL(3, p.test_p(45, 5, 28));
+ BOOST_TEST_EQUAL(3, p.test(45, 5, 28));
// Test preconditions.
// Negative number of data rows.
BOOST_TEST_THROW
- (p.test_p(-1, 1, 1)
+ (p.test(-1, 1, 1)
,std::runtime_error
,lmi_test::what_regex("^Assertion.*failed")
);
// Zero rows per group.
BOOST_TEST_THROW
- (p.test_p(1, 0, 1)
+ (p.test(1, 0, 1)
,std::logic_error
,"Rows per group must be positive."
);
// Negative number of rows per group.
BOOST_TEST_THROW
- (p.test_p(1, -1, 1)
+ (p.test(1, -1, 1)
,std::logic_error
,"Rows per group must be positive."
);
// Insufficient room to print even one group.
BOOST_TEST_THROW
- (p.test_p(1, 7, 3)
+ (p.test(1, 7, 3)
,std::runtime_error
,lmi_test::what_regex("^Assertion.*failed")
);
// A single row of data.
- BOOST_TEST_EQUAL(1, p.test_p(1, 1, 1));
- BOOST_TEST_EQUAL(1, p.test_p(1, 1, 3));
- BOOST_TEST_EQUAL(1, p.test_p(1, 3, 3));
- BOOST_TEST_EQUAL(1, p.test_p(1, 3, 7));
+ BOOST_TEST_EQUAL(1, p.test(1, 1, 1));
+ BOOST_TEST_EQUAL(1, p.test(1, 1, 3));
+ BOOST_TEST_EQUAL(1, p.test(1, 3, 3));
+ BOOST_TEST_EQUAL(1, p.test(1, 3, 7));
// One-row groups:
// Page length an odd number.
- BOOST_TEST_EQUAL(1, p.test_p(1, 1, 5));
- BOOST_TEST_EQUAL(1, p.test_p(3, 1, 5));
- BOOST_TEST_EQUAL(2, p.test_p(4, 1, 5));
- BOOST_TEST_EQUAL(2, p.test_p(6, 1, 5));
- BOOST_TEST_EQUAL(3, p.test_p(7, 1, 5));
+ BOOST_TEST_EQUAL(1, p.test(1, 1, 5));
+ BOOST_TEST_EQUAL(1, p.test(3, 1, 5));
+ BOOST_TEST_EQUAL(2, p.test(4, 1, 5));
+ BOOST_TEST_EQUAL(2, p.test(6, 1, 5));
+ BOOST_TEST_EQUAL(3, p.test(7, 1, 5));
// Same, but next even length: same outcome.
- BOOST_TEST_EQUAL(1, p.test_p(1, 1, 6));
- BOOST_TEST_EQUAL(1, p.test_p(3, 1, 6));
- BOOST_TEST_EQUAL(2, p.test_p(4, 1, 6));
- BOOST_TEST_EQUAL(2, p.test_p(6, 1, 6));
- BOOST_TEST_EQUAL(3, p.test_p(7, 1, 6));
+ BOOST_TEST_EQUAL(1, p.test(1, 1, 6));
+ BOOST_TEST_EQUAL(1, p.test(3, 1, 6));
+ BOOST_TEST_EQUAL(2, p.test(4, 1, 6));
+ BOOST_TEST_EQUAL(2, p.test(6, 1, 6));
+ BOOST_TEST_EQUAL(3, p.test(7, 1, 6));
// Two-row groups.
// Page length four.
- BOOST_TEST_EQUAL(1, p.test_p(1, 2, 4));
- BOOST_TEST_EQUAL(1, p.test_p(3, 2, 4));
- BOOST_TEST_EQUAL(2, p.test_p(4, 2, 4));
- BOOST_TEST_EQUAL(2, p.test_p(5, 2, 4));
- BOOST_TEST_EQUAL(3, p.test_p(6, 2, 4));
+ BOOST_TEST_EQUAL(1, p.test(1, 2, 4));
+ BOOST_TEST_EQUAL(1, p.test(3, 2, 4));
+ BOOST_TEST_EQUAL(2, p.test(4, 2, 4));
+ BOOST_TEST_EQUAL(2, p.test(5, 2, 4));
+ BOOST_TEST_EQUAL(3, p.test(6, 2, 4));
// Page length five: no room for widow and orphan control.
- BOOST_TEST_EQUAL(1, p.test_p(1, 2, 5));
- BOOST_TEST_EQUAL(1, p.test_p(4, 2, 5));
- BOOST_TEST_EQUAL(2, p.test_p(5, 2, 5));
- BOOST_TEST_EQUAL(2, p.test_p(8, 2, 5));
- BOOST_TEST_EQUAL(3, p.test_p(9, 2, 5));
+ BOOST_TEST_EQUAL(1, p.test(1, 2, 5));
+ BOOST_TEST_EQUAL(1, p.test(4, 2, 5));
+ BOOST_TEST_EQUAL(2, p.test(5, 2, 5));
+ BOOST_TEST_EQUAL(2, p.test(8, 2, 5));
+ BOOST_TEST_EQUAL(3, p.test(9, 2, 5));
// Same, but next even length: same outcome.
- BOOST_TEST_EQUAL(1, p.test_p(1, 2, 6));
- BOOST_TEST_EQUAL(1, p.test_p(4, 2, 6));
- BOOST_TEST_EQUAL(2, p.test_p(5, 2, 6));
- BOOST_TEST_EQUAL(2, p.test_p(8, 2, 6));
- BOOST_TEST_EQUAL(3, p.test_p(9, 2, 6));
+ BOOST_TEST_EQUAL(1, p.test(1, 2, 6));
+ BOOST_TEST_EQUAL(1, p.test(4, 2, 6));
+ BOOST_TEST_EQUAL(2, p.test(5, 2, 6));
+ BOOST_TEST_EQUAL(2, p.test(8, 2, 6));
+ BOOST_TEST_EQUAL(3, p.test(9, 2, 6));
// Page length seven: one extra data row possible on last page.
- BOOST_TEST_EQUAL(1, p.test_p(1, 2, 7));
- BOOST_TEST_EQUAL(1, p.test_p(4, 2, 7));
- BOOST_TEST_EQUAL(1, p.test_p(5, 2, 7));
- BOOST_TEST_EQUAL(2, p.test_p(6, 2, 7));
- BOOST_TEST_EQUAL(2, p.test_p(8, 2, 7));
- BOOST_TEST_EQUAL(2, p.test_p(9, 2, 7));
+ BOOST_TEST_EQUAL(1, p.test(1, 2, 7));
+ BOOST_TEST_EQUAL(1, p.test(4, 2, 7));
+ BOOST_TEST_EQUAL(1, p.test(5, 2, 7));
+ BOOST_TEST_EQUAL(2, p.test(6, 2, 7));
+ BOOST_TEST_EQUAL(2, p.test(8, 2, 7));
+ BOOST_TEST_EQUAL(2, p.test(9, 2, 7));
std::cout << "Zero rows" << std::endl;
- std::cout << test_paginate(0, 2, 7) << std::endl;
+ std::cout << test_pagination(0, 2, 7) << std::endl;
std::cout << "Last page: zero full groups and one partial" << std::endl;
- std::cout << test_paginate(1, 2, 7) << std::endl;
+ std::cout << test_pagination(1, 2, 7) << std::endl;
std::cout << "Last page: two full groups and one partial" << std::endl;
- std::cout << test_paginate(5, 2, 7) << std::endl;
+ std::cout << test_pagination(5, 2, 7) << std::endl;
std::cout << "Last page: one full group" << std::endl;
- std::cout << test_paginate(6, 2, 7) << std::endl;
+ std::cout << test_pagination(6, 2, 7) << std::endl;
std::cout << "Last page: one full group and one partial" << std::endl;
- std::cout << test_paginate(7, 2, 7) << std::endl;
+ std::cout << test_pagination(7, 2, 7) << std::endl;
std::cout << "Last page: full page" << std::endl;
- std::cout << test_paginate(8, 2, 7) << std::endl;
+ std::cout << test_pagination(8, 2, 7) << std::endl;
std::cout << "Last page: full page, plus an antiwidowed partial group" <<
std::endl;
- std::cout << test_paginate(9, 2, 7) << std::endl;
+ std::cout << test_pagination(9, 2, 7) << std::endl;
}
int test_main(int, char*[])