summaryrefslogtreecommitdiff
path: root/libstdc++-v3/testsuite/27_io/fpos/mbstate_t
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3/testsuite/27_io/fpos/mbstate_t')
-rw-r--r--libstdc++-v3/testsuite/27_io/fpos/mbstate_t/1.cc59
-rw-r--r--libstdc++-v3/testsuite/27_io/fpos/mbstate_t/12065.cc46
-rw-r--r--libstdc++-v3/testsuite/27_io/fpos/mbstate_t/2.cc88
-rw-r--r--libstdc++-v3/testsuite/27_io/fpos/mbstate_t/3.cc56
-rw-r--r--libstdc++-v3/testsuite/27_io/fpos/mbstate_t/4_neg.cc43
-rw-r--r--libstdc++-v3/testsuite/27_io/fpos/mbstate_t/5.cc40
-rw-r--r--libstdc++-v3/testsuite/27_io/fpos/mbstate_t/6.cc41
7 files changed, 373 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/1.cc b/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/1.cc
new file mode 100644
index 000000000..be3e478e8
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/1.cc
@@ -0,0 +1,59 @@
+// 1999-09-20 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// 27.4.3 template class fpos
+
+#include <cwchar> // for mbstate_t
+#include <ios>
+#include <cstring>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef std::mbstate_t state_type;
+ state_type state01 = state_type();
+ state_type state02 = state_type();
+
+ std::streampos pos01(0);
+ std::streampos pos02(0);
+
+ // 27.4.3.1 fpos members
+ // void state(state_type s);
+ // state_type state();
+
+ // XXX Need to have better sanity checking for the mbstate_t type,
+ // or whatever the insantiating type for class fpos happens to be
+ // for streampos, as things like equality operators and assignment
+ // operators, increment and deincrement operators need to be in
+ // place.
+ pos01.state(state02);
+ state01 = pos01.state();
+ test = std::memcmp(&state01, &state02, sizeof(state_type)) == 0;
+ VERIFY( test );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/12065.cc b/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/12065.cc
new file mode 100644
index 000000000..c7f1167ba
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/12065.cc
@@ -0,0 +1,46 @@
+// Copyright (C) 2003, 2009
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 27.4.3 fpos
+
+#include <typeinfo>
+#include <ios>
+#include <testsuite_hooks.h>
+
+// libstdc++/12065
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::streampos p(0);
+ const std::streampos q(0);
+ std::streamoff o(0);
+
+ VERIFY( typeid(p + o) == typeid(std::streampos) );
+ VERIFY( typeid(q + o) == typeid(std::streampos) );
+ VERIFY( typeid(p - o) == typeid(std::streampos) );
+ VERIFY( typeid(q - o) == typeid(std::streampos) );
+ VERIFY( typeid(p - q) == typeid(std::streamoff) );
+ VERIFY( typeid(q - p) == typeid(std::streamoff) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/2.cc b/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/2.cc
new file mode 100644
index 000000000..accb56535
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/2.cc
@@ -0,0 +1,88 @@
+// 1999-09-20 bkoz
+
+// Copyright (C) 1999, 2001, 2003, 2009, 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// 27.4.3 template class fpos
+
+#include <cwchar> // for mbstate_t
+#include <ios>
+#include <testsuite_hooks.h>
+
+// 27.4.3.2 fpos requirements/invariants
+void test02()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef std::mbstate_t state_type;
+
+ std::streamoff off01;
+ std::streamoff off02 = 997;
+ int i02 = 999;
+
+ // p(i), p = i
+ std::streampos pos01(i02);
+ std::streampos pos02 = i02;
+ VERIFY( pos01 == pos02 );
+
+ // p(o), p = o
+ // NB: P(o) is only required.
+ std::streampos pos03(off02);
+ std::streampos pos04 = off02;
+ VERIFY( pos03 == pos04 );
+
+ // O(p)
+ std::streamoff off03(pos04);
+ VERIFY( off03 == off02 );
+
+ // p == q, p!= q
+ VERIFY( pos01 == pos02 );
+ VERIFY( pos02 != pos03 );
+
+ // q = p + o
+ // p += o
+ pos03 = pos03 + off02;
+ pos04 += off02;
+ VERIFY( pos03 == pos04 );
+ std::streampos pos05 = pos03;
+ VERIFY ( pos05 == pos03 );
+
+ // q = p - o
+ // p -= o
+ pos03 = pos03 - off02;
+ pos04 -= off02;
+ VERIFY( pos03 == pos04 );
+ std::streampos pos07 = pos03;
+ VERIFY ( pos07 == pos03 );
+
+ // o = p - q
+ VERIFY( 0 == pos03 - pos04 );
+
+ // streamsize -> streamoff
+ // streamoff -> streamsize
+ off01 = off02;
+ std::streamsize size01(off02);
+ std::streamoff off04(size01);
+ VERIFY( off01 == off04 );
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/3.cc b/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/3.cc
new file mode 100644
index 000000000..34c557bfb
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/3.cc
@@ -0,0 +1,56 @@
+// 1999-09-20 bkoz
+
+// Copyright (C) 1999, 2001, 2003, 2009, 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// 27.4.3 template class fpos
+
+#include <cwchar> // for mbstate_t
+#include <ios>
+#include <testsuite_hooks.h>
+
+void test03()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef std::mbstate_t state_type;
+ std::streamoff off01;
+
+ // casts to const streamoff
+ const std::streampos pos01 = 0;
+ off01 = std::streamoff(pos01);
+ off01 = off01; // Suppress unused warning.
+
+ // equality/inequality with const args
+ const std::streampos pos02(54);
+ std::streampos pos03(44);
+ VERIFY( !(pos03 == pos02) );
+ VERIFY( pos03 != pos02 );
+ VERIFY( !(pos02 == pos03) );
+ VERIFY( pos02 != pos03 );
+
+ // default values
+ std::streampos pos04;
+ VERIFY( std::streamoff(pos04) == 0 );
+}
+
+int main()
+{
+ test03();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/4_neg.cc b/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/4_neg.cc
new file mode 100644
index 000000000..9e3cad5d5
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/4_neg.cc
@@ -0,0 +1,43 @@
+// Copyright (C) 2003, 2009, 2010
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 27.4.3 fpos
+
+// { dg-do compile }
+
+#include <ios>
+
+void test04()
+{
+ std::streampos pos;
+ long n;
+
+ // Implicit conversion
+ n = pos; // { dg-error "cannot convert" "" { xfail *-*-* } }
+
+ // Explicit conversion
+ n = static_cast<long>(pos); // { dg-error "invalid static_cast" "" { xfail *-*-* } }
+
+ n = n; // Suppress unused warning.
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/5.cc b/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/5.cc
new file mode 100644
index 000000000..a32e34adf
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/5.cc
@@ -0,0 +1,40 @@
+// { dg-do compile }
+
+// 2006-03-13 Paolo Carlini <pcarlini@suse.de>
+
+// Copyright (C) 2006, 2009, 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// 27.4.3 template class fpos
+
+#include <ios>
+
+void test01()
+{
+ bool test01, test02;
+
+ std::streampos pos01(-1), pos02(0);
+
+ test01 = pos01 == -1;
+ test01 = -1 == pos01;
+ test01 = test01; // Suppress unused warning.
+
+ test02 = pos02 != -1;
+ test02 = -1 != pos02;
+ test02 = test02; // Suppress unused warning.
+}
diff --git a/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/6.cc b/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/6.cc
new file mode 100644
index 000000000..0cf651a5c
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/fpos/mbstate_t/6.cc
@@ -0,0 +1,41 @@
+// { dg-do compile }
+
+// 2006-06-21 Paolo Carlini <pcarlini@suse.de>
+
+// Copyright (C) 2006, 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+// 27.4.3 template class fpos
+
+#include <ios>
+
+class
+octave_int
+{
+ template<class U>
+ octave_int(U i);
+};
+
+bool
+operator==(const octave_int& lhs, const octave_int& rhs);
+
+bool
+Fsave(void)
+{
+ return std::streampos(0) == std::streampos(0);
+}