summaryrefslogtreecommitdiff
path: root/2005/i/robert/src/data/test_data_buffer.cc
diff options
context:
space:
mode:
Diffstat (limited to '2005/i/robert/src/data/test_data_buffer.cc')
-rw-r--r--2005/i/robert/src/data/test_data_buffer.cc77
1 files changed, 77 insertions, 0 deletions
diff --git a/2005/i/robert/src/data/test_data_buffer.cc b/2005/i/robert/src/data/test_data_buffer.cc
new file mode 100644
index 0000000..36095ab
--- /dev/null
+++ b/2005/i/robert/src/data/test_data_buffer.cc
@@ -0,0 +1,77 @@
+// test_data_buffer.cc
+// robert - programme du robot 2005. {{{
+//
+// Copyright (C) 2005 Dufour Jérémy
+//
+// This program 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 2 of the License, or
+// (at your option) any later version.
+//
+// This program 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 program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+// Contact :
+// Web: %WEB%
+// Email: <dufourj@efrei.fr>
+// }}}
+
+#include "data_buffer.hh"
+
+#include <iostream>
+#include <stdexcept>
+#include <unistd.h>
+
+void
+check_data (uint8_t *b1, uint8_t *b2, unsigned size)
+{
+ for (unsigned i = 0; i < size; i ++)
+ if (b1[i] != b2[i])
+ throw std::runtime_error ("Erreur, buffers invalides");
+}
+
+int
+main (int argc, char **argv)
+{
+ try
+ {
+ DataBuffer d;
+ uint8_t bufW[100];
+ uint8_t bufR[150];
+ // Remplissage des buffers de test
+ memset (bufW, 42, 100);
+ memset (bufR, 1, 150);
+ // On en écrit 50
+ d.write (bufW, 50);
+ // On en lit 42
+ if (d.read (bufR, 42) == 42)
+ check_data (bufW, bufR, 42);
+ else
+ throw std::runtime_error ("Erreur de taille de données");
+ // On en re écrit 50
+ d.write (&bufW[50], 50);
+ unsigned pos = 42;
+ unsigned status;
+ // On lit jusqu'à la fin
+ do
+ {
+ status = d.read (&bufR[pos], 10);
+ if (status)
+ check_data (&bufW[pos], &bufR[pos], status);
+ pos += status;
+ } while (status);
+ // On vérifie que tout a été bien lue
+ }
+ catch (const std::runtime_error &r)
+ {
+ std::cerr << r.what () << std::endl;
+ return 1;
+ }
+ return 0;
+}