Index: tests/list/.expect/dlist-insert-remove-2.txt
===================================================================
--- tests/list/.expect/dlist-insert-remove-2.txt	(revision 938885d37b31a7fbc5553f3d8538c2b6498afd42)
+++ tests/list/.expect/dlist-insert-remove-2.txt	(revision 8d1ad36cef9bb7b219f38dfae154e557ae4f238e)
@@ -1092,2 +1092,19 @@
 -
 -
+
+~~~~~~~~~~~~~~~~~~~ Ease-of-access cases ~~~~~~~~~~~~~~~~~~
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Test 18-i.  Modifying Freds on MINE
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Not implmented
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Test 18-ii.  Modifying Freds on YOURS
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Not implmented
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Test 18-iii.  Modifying Maries
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+accessor_cases done
+try_pop cases done
+origin_mutation cases done
Index: tests/list/dlist-insert-remove-2.cfa
===================================================================
--- tests/list/dlist-insert-remove-2.cfa	(revision 938885d37b31a7fbc5553f3d8538c2b6498afd42)
+++ tests/list/dlist-insert-remove-2.cfa	(revision 8d1ad36cef9bb7b219f38dfae154e557ae4f238e)
@@ -1432,4 +1432,188 @@
 }
 
+
+////////////////////////////////////////////////////////////
+//
+// Section 4g
+//
+// Test cases of `isEmpty, `hasPrev, `hasNext,
+// try_pop_front, try_pop_back, modifications via `elems
+//
+// Example of call-side user code
+//
+////////////////////////////////////////////////////////////
+
+void test__accessor_cases__mary() {
+
+	mary m1 = {1.7};
+	mary m2 = {2.7};
+	mary m3 = {3.7};
+
+	dlist(mary, mary) ml;	assert( ml`isEmpty);
+
+	insert_last(ml, m1);	assert(!ml`isEmpty);
+	insert_last(ml, m2);	assert(!ml`isEmpty);
+	insert_last(ml, m3);	assert(!ml`isEmpty);
+
+	mary & m1prev = m1`prev;
+	mary & m1next = m1`next;
+	mary & m2prev = m2`prev;
+	mary & m2next = m2`next;
+	mary & m3prev = m3`prev;
+	mary & m3next = m3`next;
+
+	assert (&m1prev == 0p);
+	assert (&m1next == &m2);
+	assert (&m2prev == &m1);
+	assert (&m2next == &m3);
+	assert (&m3prev == &m2);
+	assert (&m3next == 0p);
+
+	assert(!m1`hasPrev);
+	assert( m1`hasNext);
+	assert( m2`hasPrev);
+	assert( m2`hasNext);
+	assert( m3`hasPrev);
+	assert(!m3`hasNext);
+
+	printf("accessor_cases done\n");
+}
+
+void test__try_pop__mary() {
+
+	mary m1 = {1.7};
+	mary m2 = {2.7};
+	mary m3 = {3.7};
+
+	dlist(mary, mary) ml;
+
+	mary &m1r = *0p;
+	mary &m2r = *0p;
+	mary &m3r = *0p;
+	mary &mxr = *0p;
+
+	// queue, back to front
+
+	assert( ml`isEmpty);
+
+	insert_last(ml, m1);
+	insert_last(ml, m2);
+	insert_last(ml, m3);
+
+	&m1r = & try_pop_front(ml);	assert(!ml`isEmpty);
+	&m2r = & try_pop_front(ml);	assert(!ml`isEmpty);
+	&m3r = & try_pop_front(ml);	assert( ml`isEmpty);
+	&mxr = & try_pop_front(ml);	assert( ml`isEmpty);
+
+	assert( &m1r == &m1 );
+	assert( &m2r == &m2 );
+	assert( &m3r == &m3 );
+	assert( &mxr == 0p  );
+
+	&m1r = 0p;
+	&m2r = 0p;
+	&m3r = 0p;
+
+	// queue, front to back
+
+	assert( ml`isEmpty);
+
+	insert_first(ml, m1);
+	insert_first(ml, m2);
+	insert_first(ml, m3);
+
+	&m1r = & try_pop_back(ml);	assert(!ml`isEmpty);
+	&m2r = & try_pop_back(ml);	assert(!ml`isEmpty);
+	&m3r = & try_pop_back(ml);	assert( ml`isEmpty);
+	&mxr = & try_pop_back(ml);	assert( ml`isEmpty);
+
+	assert( &m1r == &m1 );
+	assert( &m2r == &m2 );
+	assert( &m3r == &m3 );
+	assert( &mxr == 0p  );
+
+	&m1r = 0p;
+	&m2r = 0p;
+	&m3r = 0p;
+
+	// stack at front
+
+	assert( ml`isEmpty);
+
+	insert_first(ml, m1);
+	insert_first(ml, m2);
+	insert_first(ml, m3);
+
+	&m3r = & try_pop_front(ml);	assert(!ml`isEmpty);
+	&m2r = & try_pop_front(ml);	assert(!ml`isEmpty);
+	&m1r = & try_pop_front(ml);	assert( ml`isEmpty);
+	&mxr = & try_pop_front(ml);	assert( ml`isEmpty);
+
+	assert( &m1r == &m1 );
+	assert( &m2r == &m2 );
+	assert( &m3r == &m3 );
+	assert( &mxr == 0p  );
+
+	&m1r = 0p;
+	&m2r = 0p;
+	&m3r = 0p;
+
+	// stack at back
+
+	assert( ml`isEmpty);
+
+	insert_last(ml, m1);
+	insert_last(ml, m2);
+	insert_last(ml, m3);
+
+	&m3r = & try_pop_back(ml);	assert(!ml`isEmpty);
+	&m2r = & try_pop_back(ml);	assert(!ml`isEmpty);
+	&m1r = & try_pop_back(ml);	assert( ml`isEmpty);
+	&mxr = & try_pop_back(ml);	assert( ml`isEmpty);
+
+	assert( &m1r == &m1 );
+	assert( &m2r == &m2 );
+	assert( &m3r == &m3 );
+	assert( &mxr == 0p  );
+
+	&m1r = 0p;
+	&m2r = 0p;
+	&m3r = 0p;
+
+	printf("try_pop cases done\n");
+}
+
+void test__origin_mutation__mary() {
+
+	mary m1 = {1.7};
+
+	dlist(mary, mary) ml;
+	mary & mlorigin = ml`elems;
+
+	// insert before the origin
+
+	insert_before( ml`elems, m1 );
+	assert( ! ml`isEmpty );
+
+	mary & mlfirst = ml`first;
+	mary & mllast = ml`last;
+
+	assert( &m1 == & mlfirst );
+	assert( &m1 == & mllast );
+
+	// moveNext after last goes back to origin, &vv
+
+	bool canMoveNext = mllast`moveNext;
+	bool canMovePrev = mlfirst`movePrev;
+
+	assert( ! canMoveNext );
+	assert( ! canMovePrev );
+
+	assert( &mlorigin == & mlfirst );
+	assert( &mlorigin == & mllast );
+
+	printf("origin_mutation cases done\n");
+}
+
 ////////////////////////////////////////////////////////////
 //
@@ -1708,4 +1892,26 @@
 	test__pop_last__maries();
 
+	sout | "";
+	sout | "~~~~~~~~~~~~~~~~~~~ Ease-of-access cases ~~~~~~~~~~~~~~~~~~";
+	sout | "";
+
+	sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
+	sout | "Test 18-i.  Modifying Freds on MINE";
+	sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
+	sout | "Not implmented";
+
+	sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
+	sout | "Test 18-ii.  Modifying Freds on YOURS";
+	sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
+	sout | "Not implmented";
+
+	sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
+	sout | "Test 18-iii.  Modifying Maries";
+	sout | "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
+
+	test__accessor_cases__mary();
+	test__try_pop__mary();
+	test__origin_mutation__mary();
+
 	return 0;
 }
