Fixes
authorBen Pfaff <blp@cs.stanford.edu>
Sun, 6 Apr 2025 16:13:58 +0000 (09:13 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Sun, 6 Apr 2025 16:13:58 +0000 (09:13 -0700)
rust/pspp/src/output/pivot/mod.rs
rust/pspp/src/output/pivot/output.rs
rust/pspp/src/output/pivot/test.rs

index 9f13556f3498a5cc2a02ec09c419fddba1872592..b8d0b8d0740b12ef7f8c7bc9b0c5a215eb9808d3 100644 (file)
@@ -124,7 +124,7 @@ impl Area {
             Area::Caption => (Some(Left), Top, [8, 11], [1, 1]),
             Area::Footer => (Some(Left), Top, [11, 8], [2, 3]),
             Area::Corner => (Some(Left), Bottom, [8, 11], [1, 1]),
-            Area::ColumnLabels => (Some(Left), Top, [8, 11], [1, 3]),
+            Area::ColumnLabels => (Some(Center), Top, [8, 11], [1, 3]),
             Area::RowLabels => (Some(Left), Top, [8, 11], [1, 3]),
             Area::Data => (None, Top, [8, 11], [1, 1]),
             Area::Layers => (Some(Left), Bottom, [8, 11], [1, 3]),
@@ -659,7 +659,6 @@ impl PivotTableBuilder {
         );
     }
     pub fn build(self) -> PivotTable {
-        let row_label_position = self.look.row_label_position;
         let corner_text = false;
         let mut table = PivotTable::new(self.title, self.look.clone());
         let mut dimensions = Vec::with_capacity(self.dimensions.len());
index 43707ceddcfb5e9920ae5b9c376ad09681cce972..3679e6be6145b1757619678968c7a5706477514d 100644 (file)
@@ -297,11 +297,11 @@ impl PivotTable {
             self.output_footnotes(&self.collect_footnotes(tables.into_iter().flatten()));
 
         OutputTables {
-            title: None,
-            layers: None,
+            title,
+            layers,
             body,
-            caption: None,
-            footnotes: None,
+            caption,
+            footnotes,
         }
     }
 
@@ -376,7 +376,6 @@ fn compose_headings(
 ) {
     let v = !h;
     let h_axis = &pt.axes[h.into()];
-    let v_axis = &pt.axes[v.into()];
     let v_size = pt.axis_label_depth(h.into());
     let h_ofs = pt.axis_label_depth(v.into());
     let n_columns = column_enumeration.len();
index 97bae3309134a3efef85b5a69bbf533c864850dd..0ef37dfb2494720029325020136cfdda5a993fb6 100644 (file)
@@ -31,7 +31,7 @@ fn pivot_table_1d() {
     let dimension = DimensionBuilder::new(Axis3::X, bigger_group);
     let mut pt = PivotTableBuilder::new(Value::new_text("Columns"), &[dimension]);
     for i in 0..5 {
-        pt.insert(&[i], Value::new_number(Some(i as f64)));
+        pt.insert(&[i], Value::new_integer(Some(i as f64)));
     }
     let mut driver = TextDriver::new(File::create("/dev/stdout").unwrap());
     let mut pt = pt.build();
@@ -39,3 +39,42 @@ fn pivot_table_1d() {
     pt.transpose();
     driver.write(&Arc::new(Item::new(Details::Table(Box::new(pt)))));
 }
+
+#[test]
+fn pivot_table_2d() {
+    let mut a = GroupBuilder::new(Value::new_text("a"));
+    for name in ["a1", "a2", "a3"] {
+        a.push(Value::new_text(name));
+    }
+    let d1 = DimensionBuilder::new(Axis3::X, a);
+
+    let mut b = GroupBuilder::new(Value::new_text("b"));
+    for name in ["b1", "b2", "b3"] {
+        b.push(Value::new_text(name));
+    }
+    let d2 = DimensionBuilder::new(Axis3::X, b);
+
+    let mut pt = PivotTableBuilder::new(Value::new_text("Columns"), &[d1, d2]);
+    let mut i = 0;
+    for a in 0..3 {
+        for b in 0..3 {
+            pt.insert(&[a, b], Value::new_integer(Some(i as f64)));
+            i += 1;
+        }
+    }
+    let mut pt = pt.build();
+    let mut driver = TextDriver::new(File::create("/dev/stdout").unwrap());
+    driver.write(&Arc::new(Item::new(Details::Table(Box::new(pt.clone())))));
+
+    pt.transpose();
+    pt.title = Some(Box::new(Value::new_text("Rows")));
+    driver.write(&Arc::new(Item::new(Details::Table(Box::new(pt.clone())))));
+
+    pt.move_dimension(0, Axis3::X, 0);
+    pt.title = Some(Box::new(Value::new_text("Column x Row")));
+    driver.write(&Arc::new(Item::new(Details::Table(Box::new(pt.clone())))));
+
+    pt.transpose();
+    pt.title = Some(Box::new(Value::new_text("Row x Column")));
+    driver.write(&Arc::new(Item::new(Details::Table(Box::new(pt.clone())))));
+}