Add some tests for typedef to member function pointers

This commit is contained in:
William S Fulton 2017-03-06 20:26:04 +00:00
parent fc638814ae
commit 2a5068bcf2
6 changed files with 40 additions and 2 deletions

View File

@ -49,6 +49,8 @@ public class member_pointer_const_runme {
check( "Square area ", 100.0, member_pointer_const.do_op(s,member_pointer_const.AREAPT) );
check( "Square perim", 40.0, member_pointer_const.do_op(s,member_pointer_const.PERIMPT) );
// Typedefs
check( "Square perim", 40.0, member_pointer_const.do_op_td(s,perim_pt) );
}
private static void check(String what, double expected, double actual) {

View File

@ -49,6 +49,8 @@ public class member_pointer_runme {
check( "Square area ", 100.0, member_pointer.do_op(s,member_pointer.AREAPT) );
check( "Square perim", 40.0, member_pointer.do_op(s,member_pointer.PERIMPT) );
// Typedefs
check( "Square perim", 40.0, member_pointer.do_op_td(s,perim_pt) );
}
private static void check(String what, double expected, double actual) {

View File

@ -44,17 +44,22 @@ public:
virtual double perimeter(void);
};
/* Typedef */
typedef double (Shape::*PerimeterFunc_td)(void);
extern double do_op(Shape *s, double (Shape::*m)(void));
extern double do_op_td(Shape *s, PerimeterFunc_td m);
/* Functions that return member pointers */
extern double (Shape::*areapt())(void);
extern double (Shape::*perimeterpt())(void);
extern PerimeterFunc_td perimeterpt_td();
/* Global variables that are member pointers */
extern double (Shape::*areavar)(void);
extern double (Shape::*perimetervar)(void);
extern PerimeterFunc_td perimetervar_td;
%}
%{
@ -88,6 +93,10 @@ double do_op(Shape *s, double (Shape::*m)(void)) {
return (s->*m)();
}
double do_op_td(Shape *s, PerimeterFunc_td m) {
return (s->*m)();
}
double (Shape::*areapt())(void) {
return &Shape::area;
}
@ -96,9 +105,14 @@ double (Shape::*perimeterpt())(void) {
return &Shape::perimeter;
}
PerimeterFunc_td perimeterpt_td() {
return &Shape::perimeter;
}
/* Member pointer variables */
double (Shape::*areavar)(void) = &Shape::area;
double (Shape::*perimetervar)(void) = &Shape::perimeter;
PerimeterFunc_td perimetervar_td = &Shape::perimeter;
%}

View File

@ -45,17 +45,22 @@ public:
virtual double perimeter(void) const;
};
/* Typedef */
typedef double (Shape::*PerimeterFunc_td)(void) const;
extern double do_op(Shape *s, double (Shape::*m)(void) const);
extern double do_op_td(Shape *s, PerimeterFunc_td m);
/* Functions that return member pointers */
extern double (Shape::*areapt())(void) const;
extern double (Shape::*perimeterpt())(void) const;
extern PerimeterFunc_td perimeterpt_td();
/* Global variables that are member pointers */
extern double (Shape::*areavar)(void) const;
extern double (Shape::*perimetervar)(void) const;
extern PerimeterFunc_td perimetervar_td;
%}
%{
@ -89,6 +94,10 @@ double do_op(Shape *s, double (Shape::*m)(void) const) {
return (s->*m)();
}
double do_op_td(Shape *s, PerimeterFunc_td m) {
return (s->*m)();
}
double (Shape::*areapt())(void) const {
return &Shape::area;
}
@ -97,9 +106,14 @@ double (Shape::*perimeterpt())(void) const {
return &Shape::perimeter;
}
PerimeterFunc_td perimeterpt_td() {
return &Shape::perimeter;
}
/* Member pointer variables */
double (Shape::*areavar)(void) const = &Shape::area;
double (Shape::*perimetervar)(void) const = &Shape::perimeter;
PerimeterFunc_td perimetervar_td = &Shape::perimeter;
%}

View File

@ -43,6 +43,9 @@ memberPtr = NULLPT
check("Square area ", 100.0, do_op(s, AREAPT))
check("Square perim", 40.0, do_op(s, PERIMPT))
# Typedefs
check("Square perim", 40.0, do_op_td(s, perim_pt));
check("Add by value", 3, call1(ADD_BY_VALUE, 1, 2))
#check("Add by pointer", 7, call2(ADD_BY_POINTER, 3, 4))
#check("Add by reference", 11, call3(ADD_BY_REFERENCE, 5, 6))

View File

@ -43,6 +43,9 @@ memberPtr = NULLPT
check("Square area ", 100.0, do_op(s, AREAPT))
check("Square perim", 40.0, do_op(s, PERIMPT))
# Typedefs
check("Square perim", 40.0, do_op_td(s, perim_pt));
check("Add by value", 3, call1(ADD_BY_VALUE, 1, 2))
check("Add by pointer", 7, call2(ADD_BY_POINTER, 3, 4))
check("Add by reference", 11, call3(ADD_BY_REFERENCE, 5, 6))