Index: /branches/eam_branches/ohana.20150429/src/libfits/table/F_compress_T.c
===================================================================
--- /branches/eam_branches/ohana.20150429/src/libfits/table/F_compress_T.c	(revision 38407)
+++ /branches/eam_branches/ohana.20150429/src/libfits/table/F_compress_T.c	(revision 38408)
@@ -129,5 +129,6 @@
 
     if (!strcasecmp (fields[i].zctype, "AUTO")) {
-      if (!strcmp (fields[i].datatype, "float") || 
+      if (!strcmp (fields[i].datatype, "short") ||
+	  !strcmp (fields[i].datatype, "float") || 
 	  !strcmp (fields[i].datatype, "double")|| 
 	  !strcmp (fields[i].datatype, "int64_t")) {
@@ -135,11 +136,10 @@
 	goto got_cmptype;
       }
-      if (!strcmp (fields[i].datatype, "byte") ||
-	  !strcmp (fields[i].datatype, "short") ||
-	  !strcmp (fields[i].datatype, "int")) {
+      if (!strcmp (fields[i].datatype, "int")) {
 	strcpy (fields[i].zctype, "RICE_1");
 	goto got_cmptype;
       }
-      if (!strcmp (fields[i].datatype, "char")) {
+      if (!strcmp (fields[i].datatype, "byte") ||
+	  !strcmp (fields[i].datatype, "char")) {
 	strcpy (fields[i].zctype, "GZIP_1");
 	goto got_cmptype;
@@ -154,4 +154,9 @@
 	strcpy (fields[i].zctype, "GZIP_2");
       }
+    }
+
+    // OVERRIDE: GZIP_2 invalid for B (use GZIP_1)
+    if (!strcasecmp (fields[i].zctype, "GZIP_2") && !strcmp (fields[i].datatype, "byte")) {
+      strcpy (fields[i].zctype, "GZIP_1");
     }
 
Index: /branches/eam_branches/ohana.20150429/src/libfits/table/F_set_column.c
===================================================================
--- /branches/eam_branches/ohana.20150429/src/libfits/table/F_set_column.c	(revision 38407)
+++ /branches/eam_branches/ohana.20150429/src/libfits/table/F_set_column.c	(revision 38408)
@@ -266,6 +266,6 @@
   SET_VALUES("int",         int, "char", char, SWAP_WORD, 1);
   SET_VALUES("int64_t", int64_t, "char", char, SWAP_DBLE, 1);
+  SET_VALUES("float",     float, "char", char, SWAP_WORD, 1);
   SET_VALUES("double",   double, "char", char, SWAP_DBLE, 1);
-  SET_VALUES("float",     float, "char", char, SWAP_WORD, 1);
 
   SET_VALUES("char",       char, "byte", char, SWAP_NONE, 1);
@@ -274,6 +274,6 @@
   SET_VALUES("int",         int, "byte", char, SWAP_WORD, 1);
   SET_VALUES("int64_t", int64_t, "byte", char, SWAP_DBLE, 1);
-  SET_VALUES("float",     float, "byte", char, SWAP_DBLE, 1);
-  SET_VALUES("double",   double, "byte", char, SWAP_WORD, 1);
+  SET_VALUES("float",     float, "byte", char, SWAP_WORD, 1);
+  SET_VALUES("double",   double, "byte", char, SWAP_DBLE, 1);
 
   SET_VALUES("char",       char, "short", short, SWAP_NONE, 2);
@@ -282,6 +282,6 @@
   SET_VALUES("int",         int, "short", short, SWAP_WORD, 2);
   SET_VALUES("int64_t", int64_t, "short", short, SWAP_DBLE, 2);
-  SET_VALUES("float",     float, "short", short, SWAP_DBLE, 2);
-  SET_VALUES("double",   double, "short", short, SWAP_WORD, 2);
+  SET_VALUES("float",     float, "short", short, SWAP_WORD, 2);
+  SET_VALUES("double",   double, "short", short, SWAP_DBLE, 2);
 
   SET_VALUES("char",       char, "int", int, SWAP_NONE, 4);
@@ -290,6 +290,6 @@
   SET_VALUES("int",         int, "int", int, SWAP_WORD, 4);
   SET_VALUES("int64_t", int64_t, "int", int, SWAP_DBLE, 4);
-  SET_VALUES("float",     float, "int", int, SWAP_DBLE, 4);
-  SET_VALUES("double",   double, "int", int, SWAP_WORD, 4);
+  SET_VALUES("float",     float, "int", int, SWAP_WORD, 4);
+  SET_VALUES("double",   double, "int", int, SWAP_DBLE, 4);
 
   SET_VALUES("char",       char, "int64_t", int64_t, SWAP_NONE, 8);
@@ -298,6 +298,6 @@
   SET_VALUES("int",         int, "int64_t", int64_t, SWAP_WORD, 8);
   SET_VALUES("int64_t", int64_t, "int64_t", int64_t, SWAP_DBLE, 8);
-  SET_VALUES("float",     float, "int64_t", int64_t, SWAP_DBLE, 8);
-  SET_VALUES("double",   double, "int64_t", int64_t, SWAP_WORD, 8);
+  SET_VALUES("float",     float, "int64_t", int64_t, SWAP_WORD, 8);
+  SET_VALUES("double",   double, "int64_t", int64_t, SWAP_DBLE, 8);
 
   SET_VALUES("char",       char, "float", float, SWAP_NONE, 4);
@@ -306,6 +306,6 @@
   SET_VALUES("int",         int, "float", float, SWAP_WORD, 4);
   SET_VALUES("int64_t", int64_t, "float", float, SWAP_DBLE, 4);
-  SET_VALUES("float",     float, "float", float, SWAP_DBLE, 4);
-  SET_VALUES("double",   double, "float", float, SWAP_WORD, 4);
+  SET_VALUES("float",     float, "float", float, SWAP_WORD, 4);
+  SET_VALUES("double",   double, "float", float, SWAP_DBLE, 4);
 
   SET_VALUES("char",       char, "double", double, SWAP_NONE, 8);
@@ -314,6 +314,6 @@
   SET_VALUES("int",         int, "double", double, SWAP_WORD, 8);
   SET_VALUES("int64_t", int64_t, "double", double, SWAP_DBLE, 8);
-  SET_VALUES("float",     float, "double", double, SWAP_DBLE, 8);
-  SET_VALUES("double",   double, "double", double, SWAP_WORD, 8);
+  SET_VALUES("float",     float, "double", double, SWAP_WORD, 8);
+  SET_VALUES("double",   double, "double", double, SWAP_DBLE, 8);
 
 # if (0)
Index: /branches/eam_branches/ohana.20150429/src/libfits/test/compress.sh
===================================================================
--- /branches/eam_branches/ohana.20150429/src/libfits/test/compress.sh	(revision 38407)
+++ /branches/eam_branches/ohana.20150429/src/libfits/test/compress.sh	(revision 38408)
@@ -128,5 +128,6 @@
   local format cmpmode
 
-  foreach cmpmode NONE GZIP_1 GZIP_2 RICE_1 RICE_ONE
+  # foreach cmpmode NONE GZIP_1 GZIP_2 RICE_1 RICE_ONE
+  foreach cmpmode GZIP_2
     foreach format B I J K E D
       if (($cmpmode == RICE_1)   && ($format == E)) continue ; # RICE_1 is for int only
@@ -199,5 +200,4 @@
  if ($cmpmode == NONE) return; # funpack will not recognize NONE
  if ($cmpmode == RICE_ONE) return; # funpack will not recognize RICE_ONE for tables
- if (($cmpmode == GZIP_2) && ($format == B)) return; # GZIP_2 invalid for B
 
  tapDIAG 2 "===== $cmpmode $format fpack ====="
@@ -311,5 +311,5 @@
   local format cmpmode
 
-  foreach cmpmode NONE GZIP_1
+  foreach cmpmode NONE GZIP_1 GZIP_2 RICE_1 RICE_ONE
     test_table_rnd $cmpmode
   end
@@ -325,4 +325,6 @@
  $cmpmode = $1
 
+ tapDIAG 2 "===== testing $cmpmode ====="
+
  delete -q Achar Ashort Aint Along
  delete -q Ffloat Fdouble
@@ -330,15 +332,23 @@
  # lrnd generates rnd int between 0 and 0x7fffff (2^31 - 1 inclusive)
 
- # $NPT = 1000
- $NPT = 30
+ $NPT = 1000
+ # $NPT = 30
  create ni 0 $NPT -int
- set Achar  = lrnd(ni) & 0x7f
+ create nf 0 $NPT
+
+ # set Achar  = lrnd(ni) & 0x7f
+ set Achar  = int(255.999*(drnd(ni) - 0.5))
  set Ashort = lrnd(ni) & 0x7fff
  set Aint   = lrnd(ni)
- set Along  = lrnd(ni); # I cannot represent the full dynamic range of 64 bit with mana vector ints
-
- create nf 0 $NPT
- set Ffloat = drnd(nf)*1e20
- set Fdouble = drnd(nf)*1e50
+
+ # I cannot represent the full dynamic range of 64 bit with mana vector ints, but 
+ # I can with the (double) floating point vector. however, I get the wrong bits
+ set Along_dbl  = 9.223371e18 * (2.0*drnd(nf) - 1.0); 
+
+ cast Along = Along_dbl as int64
+
+ set Ffloat_dbl = 3.402822e+38  * (2.0*drnd(nf) - 1.0)
+ cast Ffloat = Ffloat_dbl as single
+ set Fdouble    = 1.797692e+308 * (2.0*drnd(nf) - 1.0)
 
  local format
@@ -347,6 +357,6 @@
  $format = BIJKED
 
- #$fields = Ffloat
- #$format = E
+ #$fields = Along
+ #$format = K
 
  write -fits test test.raw.tbl $fields -format $format
@@ -358,5 +368,5 @@
  end
 
- echo "===== $cmpmode $format raw ====="
+ tapDIAG 2 "===== $cmpmode $format raw ====="
  data test.raw.tbl
  read -fits test $fields
@@ -364,9 +374,11 @@
  foreach f $fields
    set dv = $f - $f\_raw
-   vstat dv
- end
- delete -q $fields
-
- echo "===== $cmpmode $format cmp ====="
+   vstat -q dv
+   tapOK {abs($MEAN)  < 0.001} "read our raw $f $cmpmode $format (MEAN  = $MEAN)"
+   tapOK {$SIGMA      < 0.001} "read our raw $f $cmpmode $format (SIGMA = $SIGMA)"
+ end
+ delete -q $fields
+
+ tapDIAG 2 "===== $cmpmode $format cmp ====="
  data test.cmp.tbl
  read -fits test $fields
@@ -374,5 +386,53 @@
  foreach f $fields
    set dv = $f - $f\_raw
-   vstat dv
- end
-end
+   vstat -q dv
+   tapOK {abs($MEAN)  < 0.001} "read our cmp $f $cmpmode $format (MEAN  = $MEAN)"
+   tapOK {$SIGMA      < 0.001} "read our cmp $f $cmpmode $format (SIGMA = $SIGMA)"
+ end
+ delete -q $fields
+
+ tapDIAG 2 "===== $cmpmode $format fpack ====="
+
+ # try to run fpack on ours
+ if (1)
+   tapEXEC /bin/cp -f test.raw.tbl test.fpk.tbl
+   tapEXEC fpack -table -F test.fpk.tbl
+   
+   data test.fpk.tbl
+   read -fits test $fields
+   
+   foreach f $fields
+     set dv = $f - $f\_raw
+     vstat -q dv
+     tapOK {abs($MEAN)  < 0.001} "read fpack $f $cmpmode $format (MEAN  = $MEAN)"
+     tapOK {$SIGMA      < 0.001} "read fpack $f $cmpmode $format (SIGMA = $SIGMA)"
+   end
+   delete -q $fields
+ end
+
+ break -auto off
+ echo $cmpmode $format
+ exec ls test.cmp.tbl test.fpk.tbl | fields -x 0 PCOUNT  ZCTYP1 ZCTYP2 ZCTYP3 ZCTYP4 ZCTYP5 ZCTYP6
+ break -auto on
+
+ if ($cmpmode == NONE) return; # funpack will not recognize NONE
+ if ($cmpmode == RICE_ONE) return; # funpack will not recognize RICE_ONE for tables
+
+ tapDIAG 2 "===== $cmpmode $format funpack ====="
+
+ # try to run fpack on ours
+ tapEXEC /bin/cp -f test.cmp.tbl test.fun.tbl
+ tapEXEC funpack -F test.fun.tbl
+
+ data test.fun.tbl
+ read -fits test $fields
+
+ foreach f $fields
+   set dv = $f - $f\_raw
+   vstat -q dv
+   tapOK {abs($MEAN)  < 0.001} "read funpack $f $cmpmode $format (MEAN  = $MEAN)"
+   tapOK {$SIGMA      < 0.001} "read funpack $f $cmpmode $format (SIGMA = $SIGMA)"
+ end
+ delete -q $fields
+end
+
