flat 0.1.6

Project multi-dimensional data onto the **flat** textual plane.
Documentation
#[cfg(feature = "primitive_impls")]
mod tests {
    use flat::{DagChart, DatasetBuilder, Histogram, PathChart, Render, Schemas};

    #[test]
    fn abbreviate_dagchart_count_breakdown_hint1() {
        let schema = Schemas::two("animal", "dinosaur");
        let dataset = DatasetBuilder::new(schema)
            .add(("whale".to_string(), "tyrannosaurs".to_string()))
            .add(("shark".to_string(), "triceratops".to_string()))
            .add(("shark".to_string(), "triceratops".to_string()))
            .add(("tiger".to_string(), "pterodactyl".to_string()))
            .add(("tiger".to_string(), "pterodactyl".to_string()))
            .add(("tiger".to_string(), "pterodactyl".to_string()))
            .build();
        let view = dataset.count_breakdown_2nd();
        let flat = DagChart::new(&view).render(Render {
            width_hint: 1,
            abbreviate_breakdown: true,
            ..Render::default()
        });
        assert_eq!(
            format!("\n{}", flat.to_string()),
            r#"
         dinosaur
         Sum(Count)
animal  |pt.. tr.. ty..|
shark   |      *       |
tiger   | **           |
whale   |              |"#
        );
    }

    #[test]
    fn abbreviate_dagchart_count_breakdown_hint15() {
        let schema = Schemas::two("animal", "dinosaur");
        let dataset = DatasetBuilder::new(schema)
            .add(("whale".to_string(), "tyrannosaurs".to_string()))
            .add(("shark".to_string(), "triceratops".to_string()))
            .add(("shark".to_string(), "triceratops".to_string()))
            .add(("tiger".to_string(), "pterodactyl".to_string()))
            .add(("tiger".to_string(), "pterodactyl".to_string()))
            .add(("tiger".to_string(), "pterodactyl".to_string()))
            .build();
        let view = dataset.count_breakdown_2nd();
        let flat = DagChart::new(&view).render(Render {
            width_hint: 15,
            abbreviate_breakdown: true,
            ..Render::default()
        });
        assert_eq!(
            format!("\n{}", flat.to_string()),
            r#"
         dinosaur
         Sum(Count)
animal  |pt.. tr.. ty..|
shark   |      *       |
tiger   | **           |
whale   |              |"#
        );
    }

    #[test]
    fn abbreviate_dagchart_count_breakdown_hint30() {
        let schema = Schemas::two("animal", "dinosaur");
        let dataset = DatasetBuilder::new(schema)
            .add(("whale".to_string(), "tyrannosaurs".to_string()))
            .add(("shark".to_string(), "triceratops".to_string()))
            .add(("shark".to_string(), "triceratops".to_string()))
            .add(("tiger".to_string(), "pterodactyl".to_string()))
            .add(("tiger".to_string(), "pterodactyl".to_string()))
            .add(("tiger".to_string(), "pterodactyl".to_string()))
            .build();
        let view = dataset.count_breakdown_2nd();
        let flat = DagChart::new(&view).render(Render {
            width_hint: 30,
            abbreviate_breakdown: true,
            ..Render::default()
        });
        assert_eq!(
            format!("\n{}", flat.to_string()),
            r#"
         dinosaur
         Sum(Count)
animal  |pter.. tric.. tyra..|
shark   |         **         |
tiger   | ***                |
whale   |                *   |"#
        );
    }

    #[test]
    fn abbreviate_dagchart_count_breakdown_hint180() {
        let schema = Schemas::two("animal", "dinosaur");
        let dataset = DatasetBuilder::new(schema)
            .add(("whale".to_string(), "tyrannosaurs".to_string()))
            .add(("shark".to_string(), "triceratops".to_string()))
            .add(("shark".to_string(), "triceratops".to_string()))
            .add(("tiger".to_string(), "pterodactyl".to_string()))
            .add(("tiger".to_string(), "pterodactyl".to_string()))
            .add(("tiger".to_string(), "pterodactyl".to_string()))
            .build();
        let view = dataset.count_breakdown_2nd();
        let flat = DagChart::new(&view).render(Render {
            width_hint: 180,
            abbreviate_breakdown: true,
            ..Render::default()
        });
        assert_eq!(
            format!("\n{}", flat.to_string()),
            r#"
         dinosaur
         Sum(Count)
animal  |pterodactyl  triceratops  tyrannosaurs|
shark   |                  **                  |
tiger   |    ***                               |
whale   |                               *      |"#
        );
    }

    #[test]
    fn dagchart_3d_count_breakdown_abbreviate() {
        let schema = Schemas::three("animal", "length", "stable");
        let dataset = DatasetBuilder::new(schema)
            .add(("whale".to_string(), 4u32, true))
            .add(("shark".to_string(), 4u32, false))
            .add(("shark".to_string(), 1u32, true))
            .add(("shark".to_string(), 1u32, true))
            .add(("shark".to_string(), 1u32, true))
            .add(("tiger".to_string(), 4u32, false))
            .add(("tiger".to_string(), 5u32, true))
            .add(("tiger".to_string(), 5u32, true))
            .add(("tiger".to_string(), 5u32, true))
            .add(("tiger".to_string(), 1u32, false))
            .add(("tiger".to_string(), 1u32, false))
            .add(("tiger".to_string(), 1u32, false))
            .build();
        let view = dataset.count_breakdown_3rd();
        let flat = DagChart::new(&view).render(Render {
            abbreviate_breakdown: true,
            ..Render::default()
        });
        assert_eq!(
            format!("\n{}", flat.to_string()),
            r#"
                   stable
                   Sum(Count)
length    animal  |false true |
1       - shark   |  *    *** |
4       ┘
1       ┐
4       - tiger   |****   *** |
5       ┘
4       - whale   |        *  |"#
        );
    }

    #[test]
    fn histogram_count_breakdown_abbreviate() {
        let pets = vec!["ralf", "kipp", "orville"];
        let schema = Schemas::two("length", "pet");
        let mut builder = DatasetBuilder::new(schema);

        for i in 0..10 {
            for _ in 0..i {
                builder.update(((i % 10) as f64, pets[i % 3]));
            }
        }

        let dataset = builder.build();
        let view = dataset.count_breakdown_2nd();
        let flat = Histogram::new(&view, 5).render(Render {
            abbreviate_breakdown: true,
            ..Render::default()
        });
        assert_eq!(
            format!("\n{}", flat.to_string()),
            r#"
                           pet
                           Sum(Count)
length                    |  kipp     orvi..     ralf   |
[1, 2.6)                  |    *        **              |
[2.6, 4.2)                |  ****                 ***   |
[4.2, 5.800000000000001)  |            *****            |
[5.800000000000001, 7.4)  | *******             ******  |
[7.4, 9]                  |          ********  *********|"#
        );
    }

    #[test]
    fn histogram_count_breakdown_abbreviate_hint1() {
        let pets = vec!["ralf", "kipp", "orville"];
        let schema = Schemas::two("length", "pet");
        let mut builder = DatasetBuilder::new(schema);

        for i in 0..10 {
            for _ in 0..i {
                builder.update(((i % 10) as f64, pets[i % 3]));
            }
        }

        let dataset = builder.build();
        let view = dataset.count_breakdown_2nd();
        let flat = Histogram::new(&view, 5).render(Render {
            width_hint: 1,
            abbreviate_breakdown: true,
            ..Render::default()
        });
        assert_eq!(
            format!("\n{}", flat.to_string()),
            r#"
                           pet
                           Sum(Count)
length                    |k.. o.. r..|
[1, 2.6)                  |           |
[2.6, 4.2)                |           |
[4.2, 5.800000000000001)  |     *     |
[5.800000000000001, 7.4)  | *       * |
[7.4, 9]                  |     *  ** |"#
        );
    }

    #[test]
    fn histogram_count_breakdown_abbreviate_hint15() {
        let pets = vec!["ralf", "kipp", "orville"];
        let schema = Schemas::two("length", "pet");
        let mut builder = DatasetBuilder::new(schema);

        for i in 0..10 {
            for _ in 0..i {
                builder.update(((i % 10) as f64, pets[i % 3]));
            }
        }

        let dataset = builder.build();
        let view = dataset.count_breakdown_2nd();
        let flat = Histogram::new(&view, 5).render(Render {
            width_hint: 15,
            abbreviate_breakdown: true,
            ..Render::default()
        });
        assert_eq!(
            format!("\n{}", flat.to_string()),
            r#"
                           pet
                           Sum(Count)
length                    |k.. o.. r..|
[1, 2.6)                  |           |
[2.6, 4.2)                |           |
[4.2, 5.800000000000001)  |     *     |
[5.800000000000001, 7.4)  | *       * |
[7.4, 9]                  |     *  ** |"#
        );
    }

    #[test]
    fn histogram_count_breakdown_abbreviate_hint30() {
        let pets = vec!["ralf", "kipp", "orville"];
        let schema = Schemas::two("length", "pet");
        let mut builder = DatasetBuilder::new(schema);

        for i in 0..10 {
            for _ in 0..i {
                builder.update(((i % 10) as f64, pets[i % 3]));
            }
        }

        let dataset = builder.build();
        let view = dataset.count_breakdown_2nd();
        let flat = Histogram::new(&view, 5).render(Render {
            width_hint: 30,
            abbreviate_breakdown: true,
            ..Render::default()
        });
        assert_eq!(
            format!("\n{}", flat.to_string()),
            r#"
                           pet
                           Sum(Count)
length                    |k.. o.. r..|
[1, 2.6)                  |           |
[2.6, 4.2)                |           |
[4.2, 5.800000000000001)  |     *     |
[5.800000000000001, 7.4)  | *       * |
[7.4, 9]                  |     *  ** |"#
        );
    }

    #[test]
    fn abbreviate_dagchart_count_breakdown_separation() {
        let schema = Schemas::two("pterodactyl", "dinosaur");
        let dataset = DatasetBuilder::new(schema)
            .add(("triceratops".to_string(), "tyrannosaurs".to_string()))
            .add(("shark".to_string(), "triceratops".to_string()))
            .add(("shark".to_string(), "triceratops".to_string()))
            .add(("tiger".to_string(), "pterodactyl".to_string()))
            .add(("tiger".to_string(), "pterodactyl".to_string()))
            .add(("tiger".to_string(), "pterodactyl".to_string()))
            .build();
        let view = dataset.count_breakdown_2nd();
        let flat = DagChart::new(&view).render(Render {
            width_hint: 1,
            abbreviate_breakdown: true,
            ..Render::default()
        });
        assert_eq!(
            format!("\n{}", flat.to_string()),
            r#"
              dinosaur
              Sum(Count)
pterodactyl  |pt.. tr.. ty..|
shark        |      *       |
tiger        | **           |
triceratops  |              |"#
        );
    }

    #[test]
    fn abbreviate_pathchart_count_breakdown_separation() {
        let schema = Schemas::two("pterodactyl", "dinosaur");
        let dataset = DatasetBuilder::new(schema)
            .add(("triceratops".to_string(), "tyrannosaurs".to_string()))
            .add(("shark".to_string(), "triceratops".to_string()))
            .add(("shark".to_string(), "triceratops".to_string()))
            .add(("tiger".to_string(), "pterodactyl".to_string()))
            .add(("tiger".to_string(), "pterodactyl".to_string()))
            .add(("tiger".to_string(), "pterodactyl".to_string()))
            .build();
        let view = dataset.count_breakdown_2nd();
        let flat = PathChart::new(&view).render(Render {
            width_hint: 1,
            abbreviate_breakdown: true,
            ..Render::default()
        });
        assert_eq!(
            format!("\n{}", flat.to_string()),
            r#"
               dinosaur
               Sum(Count)
/pterodactyl  |pt.. tr.. ty..|
/shark        |      *       |
/tiger        | **           |
/triceratops  |              |"#
        );
    }

    #[test]
    fn abbreviate_non_breakdown() {
        let schema = Schemas::two("animal", "dinosaur");
        let dataset = DatasetBuilder::new(schema)
            .add(("whale".to_string(), "tyrannosaurs".to_string()))
            .add(("shark".to_string(), "triceratops".to_string()))
            .add(("shark".to_string(), "triceratops".to_string()))
            .add(("tiger".to_string(), "pterodactyl".to_string()))
            .add(("tiger".to_string(), "pterodactyl".to_string()))
            .add(("tiger".to_string(), "pterodactyl".to_string()))
            .build();
        let view = dataset.count();
        let flat = DagChart::new(&view).render(Render {
            abbreviate_breakdown: true,
            ..Render::default()
        });
        assert_eq!(
            format!("\n{}", flat.to_string()),
            r#"
dinosaur        animal  |Sum(Count)
triceratops   - shark   |**
pterodactyl   - tiger   |***
tyrannosaurs  - whale   |*"#
        );
    }
}