AUnit  1.7.1
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
print64.cpp
1 #include <Print.h>
2 #include "print64.h"
3 
4 // Copied and modified from Arduino AVR Core Print.cpp file.
5 
6 namespace aunit {
7 namespace internal {
8 
9 size_t printNumber64(Print& printer, unsigned long long n, int base) {
10  if ((n & 0xFFFFFFFF00000000) == 0) {
11  return printer.print((unsigned long) n, base);
12  }
13 
14  char buf[8 * sizeof(unsigned long long) + 1];
15  char *str = &buf[sizeof(buf) - 1];
16 
17  *str = '\0';
18 
19  // prevent crash if called with base == 1
20  if (base < 2) base = 10;
21 
22  do {
23  char c = n % base;
24  n /= base;
25 
26  *--str = c < 10 ? c + '0' : c + 'A' - 10;
27  } while(n);
28 
29  return printer.write(str);
30 }
31 
32 size_t print64(Print& printer, unsigned long long n, int base) {
33  if (base == 0) {
34  base = 10;
35  }
36  return printNumber64(printer, n, base);
37 }
38 
39 size_t print64(Print& printer, long long n, int base) {
40  if (base == 0) {
41  base = 10;
42  }
43  if (base == 10) {
44  if (n < 0) {
45  size_t t = printer.write('-');
46  return printNumber64(printer, -n, base) + t;
47  } else {
48  return printNumber64(printer, n, base);
49  }
50  } else {
51  return printNumber64(printer, n, base);
52  }
53 }
54 
55 size_t println64(Print& printer, unsigned long long n, int base) {
56  size_t len = print64(printer, n, base);
57  return len + printer.println();
58 }
59 
60 size_t println64(Print& printer, long long n, int base) {
61  size_t len = print64(printer, n, base);
62  return len + printer.println();
63 }
64 
65 }
66 }
67 
Helper routines to print 'long long' and 'unsigned long long' because the Print::print() methods in P...