diff --git a/test/float_tests.c b/test/float_tests.c
index 5aefaea..7eb435e 100644
--- a/test/float_tests.c
+++ b/test/float_tests.c
@@ -14,6 +14,7 @@
 #include "float_tests.h"
 #include "qcbor/qcbor_encode.h"
 #include "qcbor/qcbor_decode.h"
+#include "qcbor/qcbor_spiffy_decode.h"
 #include <math.h> // For INFINITY and NAN and isnan()
 
 #ifndef QCBOR_DISABLE_PREFERRED_FLOAT
@@ -604,7 +605,16 @@
 
 
 /*
-[0.0, 3.14, 0.0, NaN, Infinity, 0.0, 3.140000104904175, 0.0, NaN, Infinity,
+[0.0,  // Half
+ 3.14, // Double
+ 0.0,  // Double
+ NaN,  // Double
+ Infinity, // Double
+ 0.0,  // Half
+ 3.140000104904175, // Single
+ 0.0,  // Single
+ NaN,  // Single
+ Infinity, // Single
  {100: 0.0, 101: 3.1415926, "euler": 2.718281828459045, 105: 0.0,
   102: 0.0, 103: 3.141592502593994, "euler2": 2.7182817459106445, 106: 0.0}]
  */
@@ -726,7 +736,6 @@
 }
 
 
-#ifndef QCBOR_DISABLE_PREFERRED_FLOAT
 /* returns 0 if equivalent, non-zero if not equivalent */
 static int CHECK_EXPECTED_DOUBLE(double val, double expected)
 {
@@ -740,7 +749,6 @@
       return 0;
    }
 }
-#endif
 
 
 int32_t GeneralFloatDecodeTests()
@@ -765,12 +773,12 @@
       Item.val.dfnum != 0.0) {
       return -2;
    }
-#else
+#else /* QCBOR_DISABLE_PREFERRED_FLOAT */
    uErr = QCBORDecode_GetNext(&DC, &Item);
-   if(uErr != QCBOR_ERR_HALF_PRECISION_UNSUPPORTED) {
+   if(uErr != QCBOR_ERR_HALF_PRECISION_DISABLED) {
       return -3;
    }
-#endif
+#endif /* QCBOR_DISABLE_PREFERRED_FLOAT */
 
    uErr = QCBORDecode_GetNext(&DC, &Item);
    if(uErr != QCBOR_SUCCESS ||
@@ -801,13 +809,22 @@
    }
 
 #ifndef QCBOR_DISABLE_PREFERRED_FLOAT
+   // Tests for normal config
    uErr = QCBORDecode_GetNext(&DC, &Item);
    if(uErr != QCBOR_SUCCESS ||
       Item.uDataType != QCBOR_TYPE_DOUBLE ||
       Item.val.dfnum != 0.0) {
       return -8;
    }
+#else /* QCBOR_DISABLE_PREFERRED_FLOAT */
+      // Tests for preferred serialization turned off
+      uErr = QCBORDecode_GetNext(&DC, &Item);
+      if(uErr != QCBOR_ERR_HALF_PRECISION_DISABLED) {
+         return -13;
+      }
+#endif /* QCBOR_DISABLE_PREFERRED_FLOAT */
 
+#ifndef QCBOR_DISABLE_FLOAT_HW_USE
    uErr = QCBORDecode_GetNext(&DC, &Item);
    if(uErr != QCBOR_SUCCESS ||
       Item.uDataType != QCBOR_TYPE_DOUBLE ||
@@ -836,42 +853,259 @@
       return -12;
    }
 
-#else
+#else /* QCBOR_DISABLE_FLOAT_HW_USE */
+   // Tests for floating point HW use disabled
    uErr = QCBORDecode_GetNext(&DC, &Item);
-   if(uErr != QCBOR_ERR_HALF_PRECISION_UNSUPPORTED) {
-      return -13;
+   if(uErr != QCBOR_SUCCESS ||
+      Item.uDataType != QCBOR_TYPE_FLOAT ||
+      CHECK_EXPECTED_DOUBLE(3.14, Item.val.fnum)) {
+      return -9;
    }
 
    uErr = QCBORDecode_GetNext(&DC, &Item);
    if(uErr != QCBOR_SUCCESS ||
       Item.uDataType != QCBOR_TYPE_FLOAT ||
-      Item.val.fnum != 3.14f) {
-      return -14;
-   }
-
-   uErr = QCBORDecode_GetNext(&DC, &Item);
-   if(uErr != QCBOR_SUCCESS ||
-      Item.uDataType != QCBOR_TYPE_FLOAT ||
-      Item.val.fnum != 0.0f) {
-      return -15;
+      Item.val.fnum != 0.0) {
+      return -10;
    }
 
    uErr = QCBORDecode_GetNext(&DC, &Item);
    if(uErr != QCBOR_SUCCESS ||
       Item.uDataType != QCBOR_TYPE_FLOAT ||
       !isnan(Item.val.fnum)) {
-      return -16;
+      return -11;
    }
 
    uErr = QCBORDecode_GetNext(&DC, &Item);
    if(uErr != QCBOR_SUCCESS ||
       Item.uDataType != QCBOR_TYPE_FLOAT ||
       Item.val.fnum != INFINITY) {
-      return -17;
+      return -12;
    }
-#endif
+#endif /* QCBOR_DISABLE_FLOAT_HW_USE */
+
    /* Sufficent test coverage. Don't need to decode the rest */
 
+
+   // Now tests for spiffy decode
+   TestData = UsefulBuf_FROM_BYTE_ARRAY_LITERAL(spExpectedFloats);
+   double d;
+   QCBORDecode_Init(&DC, TestData, 0);
+   QCBORDecode_EnterArray(&DC);
+
+#ifndef QCBOR_DISABLE_PREFERRED_FLOAT
+#ifndef QCBOR_DISABLE_FLOAT_HW_USE
+   // Spiffy decode tests for normal full float support
+   QCBORDecode_GetDouble(&DC, &d);
+   uErr = QCBORDecode_GetAndResetError(&DC);
+   if(uErr != QCBOR_SUCCESS ||
+      d != 0.0) {
+      return -100;
+   }
+
+   QCBORDecode_GetDouble(&DC, &d);
+   uErr = QCBORDecode_GetAndResetError(&DC);
+   if(uErr != QCBOR_SUCCESS ||
+      d != 3.14) {
+      return -101;
+   }
+
+   QCBORDecode_GetDouble(&DC, &d);
+   uErr = QCBORDecode_GetAndResetError(&DC);
+   if(uErr != QCBOR_SUCCESS ||
+      d != 0.0) {
+      return -102;
+   }
+
+   QCBORDecode_GetDouble(&DC, &d);
+   uErr = QCBORDecode_GetAndResetError(&DC);
+   if(uErr != QCBOR_SUCCESS ||
+      !isnan(d)) {
+      return -103;
+   }
+
+   QCBORDecode_GetDouble(&DC, &d);
+   uErr = QCBORDecode_GetAndResetError(&DC);
+   if(uErr != QCBOR_SUCCESS ||
+      d != INFINITY) {
+      return -104;
+   }
+
+   QCBORDecode_GetDouble(&DC, &d);
+   uErr = QCBORDecode_GetAndResetError(&DC);
+   if(uErr != QCBOR_SUCCESS ||
+      d != 0.0) {
+      return -105;
+   }
+
+   QCBORDecode_GetDouble(&DC, &d);
+   uErr = QCBORDecode_GetAndResetError(&DC);
+   if(uErr != QCBOR_SUCCESS ||
+      d != 3.140000104904175) {
+      return -106;
+   }
+
+   QCBORDecode_GetDouble(&DC, &d);
+   uErr = QCBORDecode_GetAndResetError(&DC);
+   if(uErr != QCBOR_SUCCESS ||
+      d != 0.0) {
+      return -107;
+   }
+
+   QCBORDecode_GetDouble(&DC, &d);
+   uErr = QCBORDecode_GetAndResetError(&DC);
+   if(uErr != QCBOR_SUCCESS ||
+      !isnan(d)) {
+      return -108;
+   }
+
+   QCBORDecode_GetDouble(&DC, &d);
+   uErr = QCBORDecode_GetAndResetError(&DC);
+   if(uErr != QCBOR_SUCCESS ||
+      d != INFINITY) {
+      return -109;
+   }
+#else /* QCBOR_DISABLE_FLOAT_HW_USE */
+   // Spiffy decode tests for float HW disabled
+   QCBORDecode_GetDouble(&DC, &d);
+   uErr = QCBORDecode_GetAndResetError(&DC);
+   if(uErr != QCBOR_SUCCESS ||
+      d != 0.0) {
+      return -200;
+   }
+
+   QCBORDecode_GetDouble(&DC, &d);
+   uErr = QCBORDecode_GetAndResetError(&DC);
+   if(uErr != QCBOR_SUCCESS ||
+      d != 3.14) {
+      return -201;
+   }
+
+   QCBORDecode_GetDouble(&DC, &d);
+   uErr = QCBORDecode_GetAndResetError(&DC);
+   if(uErr != QCBOR_SUCCESS ||
+      d != 0.0) {
+      return -202;
+   }
+
+   QCBORDecode_GetDouble(&DC, &d);
+   uErr = QCBORDecode_GetAndResetError(&DC);
+   if(uErr != QCBOR_SUCCESS ||
+      !isnan(d)) {
+      return -203;
+   }
+
+   QCBORDecode_GetDouble(&DC, &d);
+   uErr = QCBORDecode_GetAndResetError(&DC);
+   if(uErr != QCBOR_SUCCESS ||
+      d != INFINITY) {
+      return -204;
+   }
+
+   QCBORDecode_GetDouble(&DC, &d);
+   uErr = QCBORDecode_GetAndResetError(&DC);
+   if(uErr != QCBOR_SUCCESS ||
+      d != 0.0) {
+      return -205;
+   }
+
+   QCBORDecode_GetDouble(&DC, &d);
+   uErr = QCBORDecode_GetAndResetError(&DC);
+   if(uErr != QCBOR_ERR_HW_FLOAT_DISABLED) {
+      return -206;
+   }
+
+   QCBORDecode_GetDouble(&DC, &d);
+   uErr = QCBORDecode_GetAndResetError(&DC);
+   if(uErr != QCBOR_ERR_HW_FLOAT_DISABLED) {
+      return -207;
+   }
+
+   QCBORDecode_GetDouble(&DC, &d);
+   uErr = QCBORDecode_GetAndResetError(&DC);
+   if(uErr != QCBOR_ERR_HW_FLOAT_DISABLED ) {
+      return -208;
+   }
+
+   QCBORDecode_GetDouble(&DC, &d);
+   uErr = QCBORDecode_GetAndResetError(&DC);
+   if(uErr != QCBOR_ERR_HW_FLOAT_DISABLED ) {
+      return -209;
+   }
+
+
+#endif /* QCBOR_DISABLE_FLOAT_HW_USE */
+#else /* QCBOR_DISABLE_PREFERRED_FLOAT */
+   // Spiffy decode tests for half-precision disabled
+   QCBORDecode_GetDouble(&DC, &d);
+    uErr = QCBORDecode_GetAndResetError(&DC);
+    if(uErr != QCBOR_ERR_HALF_PRECISION_DISABLED) {
+       return -300;
+    }
+
+    QCBORDecode_GetDouble(&DC, &d);
+    uErr = QCBORDecode_GetAndResetError(&DC);
+    if(uErr != QCBOR_SUCCESS ||
+       d != 3.14) {
+       return -301;
+    }
+
+    QCBORDecode_GetDouble(&DC, &d);
+    uErr = QCBORDecode_GetAndResetError(&DC);
+    if(uErr != QCBOR_SUCCESS ||
+       d != 0.0) {
+       return -302;
+    }
+
+    QCBORDecode_GetDouble(&DC, &d);
+    uErr = QCBORDecode_GetAndResetError(&DC);
+    if(uErr != QCBOR_SUCCESS ||
+       !isnan(d)) {
+       return -303;
+    }
+
+    QCBORDecode_GetDouble(&DC, &d);
+    uErr = QCBORDecode_GetAndResetError(&DC);
+    if(uErr != QCBOR_SUCCESS ||
+       d != INFINITY) {
+       return -304;
+    }
+
+    QCBORDecode_GetDouble(&DC, &d);
+    uErr = QCBORDecode_GetAndResetError(&DC);
+    if(uErr != QCBOR_ERR_HALF_PRECISION_DISABLED) {
+       return -305;
+    }
+
+    QCBORDecode_GetDouble(&DC, &d);
+    uErr = QCBORDecode_GetAndResetError(&DC);
+    if(uErr != QCBOR_SUCCESS ||
+       d != 3.140000104904175) {
+       return -306;
+    }
+
+    QCBORDecode_GetDouble(&DC, &d);
+    uErr = QCBORDecode_GetAndResetError(&DC);
+    if(uErr != QCBOR_SUCCESS ||
+       d != 0.0) {
+       return -307;
+    }
+
+    QCBORDecode_GetDouble(&DC, &d);
+    uErr = QCBORDecode_GetAndResetError(&DC);
+    if(uErr != QCBOR_SUCCESS ||
+       !isnan(d)) {
+       return -308;
+    }
+
+    QCBORDecode_GetDouble(&DC, &d);
+    uErr = QCBORDecode_GetAndResetError(&DC);
+    if(uErr != QCBOR_SUCCESS ||
+       d != INFINITY) {
+       return -309;
+    }
+#endif /* QCBOR_DISABLE_PREFERRED_FLOAT */
+
    return 0;
 }
 
