test writing very long strings
authorBen Pfaff <blp@cs.stanford.edu>
Mon, 4 Aug 2025 20:38:06 +0000 (13:38 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Mon, 4 Aug 2025 20:38:06 +0000 (13:38 -0700)
rust/pspp/src/sys/test.rs
rust/pspp/src/sys/testdata/write-string-simple.expected
rust/pspp/src/sys/testdata/write-string-uncompressed.expected
rust/pspp/src/sys/testdata/write-string-zlib.expected

index b293fbdad88491c168a3d945a85d9febd5490b20..e2e531d12bdacf4ea0c5fe75033ffd3836ca8feb 100644 (file)
@@ -615,60 +615,38 @@ fn write_numeric() {
     }
 }
 
-/// Tests writing long string value labels and missing values.
+/// Tests writing string data.
 #[test]
-fn write_long_string_value_labels() {
+fn write_string_data() {
     for (compression, compression_string) in [
         (None, "uncompressed"),
         (Some(Compression::Simple), "simple"),
         (Some(Compression::ZLib), "zlib"),
     ] {
         let mut dictionary = Dictionary::new(UTF_8);
-        let mut s1 = Variable::new(Identifier::new("s1").unwrap(), VarWidth::String(9), UTF_8);
-        s1.value_labels.insert(
-            Datum::String(ByteString::from("abc      ")),
-            String::from("First value label"),
-        );
-        s1.value_labels.insert(
-            Datum::String(ByteString::from("abcdefgh ")),
-            String::from("Second value label"),
-        );
-        s1.value_labels.insert(
-            Datum::String(ByteString::from("abcdefghi")),
-            String::from("Third value label"),
-        );
-        s1.missing_values_mut()
-            .add_values([Datum::new_utf8("0")])
+        dictionary
+            .add_var(Variable::new(
+                Identifier::new("s1").unwrap(),
+                VarWidth::String(1),
+                UTF_8,
+            ))
             .unwrap();
-        dictionary.add_var(s1).unwrap();
 
-        let mut s2 = Variable::new(Identifier::new("s2").unwrap(), VarWidth::String(9), UTF_8);
-        s2.value_labels.insert(
-            Datum::String(ByteString::from("0        ")),
-            String::from("Fourth value label"),
-        );
-        s2.value_labels.insert(
-            Datum::String(ByteString::from("01234567")),
-            String::from("Fifth value label"),
-        );
-        s2.value_labels.insert(
-            Datum::String(ByteString::from("012345678")),
-            String::from("Sixth value label"),
-        );
-        s2.missing_values_mut()
-            .add_values([Datum::String("12").cloned(), Datum::String("123").cloned()])
+        dictionary
+            .add_var(Variable::new(
+                Identifier::new("s2").unwrap(),
+                VarWidth::String(2),
+                UTF_8,
+            ))
             .unwrap();
-        dictionary.add_var(s2).unwrap();
-
-        let mut s3 = Variable::new(Identifier::new("s3").unwrap(), VarWidth::String(9), UTF_8);
-        s3.missing_values_mut()
-            .add_values([
-                Datum::String("1234").cloned(),
-                Datum::String("12345").cloned(),
-                Datum::String("12345678").cloned(),
-            ])
+
+        dictionary
+            .add_var(Variable::new(
+                Identifier::new("s3").unwrap(),
+                VarWidth::String(3),
+                UTF_8,
+            ))
             .unwrap();
-        dictionary.add_var(s3).unwrap();
 
         dictionary
             .add_var(Variable::new(
@@ -677,18 +655,21 @@ fn write_long_string_value_labels() {
                 UTF_8,
             ))
             .unwrap();
+
+        dictionary
+            .add_var(Variable::new(
+                Identifier::new("s566").unwrap(),
+                VarWidth::String(566),
+                UTF_8,
+            ))
+            .unwrap();
+
         let mut cases = WriteOptions::reproducible(compression)
             .write_writer(&dictionary, Cursor::new(Vec::new()))
             .unwrap();
         for case in [
-            ["1", "1", "1", "xyzzyquux"],
-            ["1", "1", "        z", "30"],
-            ["1", "2", "1", "8"],
-            ["1", "2", "2", "20"],
-            ["2", "1", "1", "2"],
-            ["2", "1", "2", "22"],
-            ["2", "2", "1", "1"],
-            ["2", "2", "2", "3"],
+            ["1", "1", "1", "xyzzyquux", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\nabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\nabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\nabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\nabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\nabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\nabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\nabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\nabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\n"],
+            ["1", "2", "1", "8", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"],
         ] {
             cases
                 .write_case(case.into_iter().map(|s| Datum::String(s)))
index d063ec4c623800d3e44d440d257a64f2e7f46d7f..c034000a09f96b1f83d62ef7bb919d8e13a714d6 100644 (file)
@@ -5,33 +5,22 @@
 │       Version        │1.2.3               │
 ├──────────────────────┼────────────────────┤
 │       Compression    │SAV                 │
-│       Number of Cases│                   8
+│       Number of Cases│                   2
 ╰──────────────────────┴────────────────────╯
 
 ╭─────────┬─╮
-│Variables│4
+│Variables│5
 ╰─────────┴─╯
 
-╭──┬────────┬─────┬─────────────────┬─────┬─────┬─────────┬────────────┬────────────┬───────────────────────────╮
-│  │Position│Label│Measurement Level│ Role│Width│Alignment│Print Format│Write Format│       Missing Values      │
-├──┼────────┼─────┼─────────────────┼─────┼─────┼─────────┼────────────┼────────────┼───────────────────────────┤
-│s1│       1│     │Nominal          │Input│    9│Left     │A9          │A9          │"0"                        │
-│s2│       2│     │Nominal          │Input│    9│Left     │A9          │A9          │"12"; "123"                │
-│s3│       3│     │Nominal          │Input│    9│Left     │A9          │A9          │"1234"; "12345"; "12345678"│
-│s4│       4│     │Nominal          │Input│    9│Left     │A9          │A9          │                           │
-╰──┴────────┴─────┴─────────────────┴─────┴─────┴─────────┴────────────┴────────────┴───────────────────────────╯
-
-╭────────────────────────┬──────────────────╮
-│Variable Value          │                  │
-├────────────────────────┼──────────────────┤
-│s1             abc      │First value label │
-│               abcdefgh │Second value label│
-│               abcdefghi│Third value label │
-├────────────────────────┼──────────────────┤
-│s2             0        │Fourth value label│
-│               01234567 │Fifth value label │
-│               012345678│Sixth value label │
-╰────────────────────────┴──────────────────╯
+╭────┬────────┬─────┬─────────────────┬─────┬─────┬─────────┬────────────┬────────────┬──────────────╮
+│    │Position│Label│Measurement Level│ Role│Width│Alignment│Print Format│Write Format│Missing Values│
+├────┼────────┼─────┼─────────────────┼─────┼─────┼─────────┼────────────┼────────────┼──────────────┤
+│s1  │       1│     │Nominal          │Input│    1│Left     │A1          │A1          │              │
+│s2  │       2│     │Nominal          │Input│    2│Left     │A2          │A2          │              │
+│s3  │       3│     │Nominal          │Input│    3│Left     │A3          │A3          │              │
+│s4  │       4│     │Nominal          │Input│    9│Left     │A9          │A9          │              │
+│s566│       5│     │Nominal          │Input│   32│Left     │A566        │A566        │              │
+╰────┴────────┴─────┴─────────────────┴─────┴─────┴─────────┴────────────┴────────────┴──────────────╯
 
 ╭────────────────────────┬─────╮
 │Variable and Name       │Value│
 │s3                $@Role│0    │
 ├────────────────────────┼─────┤
 │s4                $@Role│0    │
+├────────────────────────┼─────┤
+│s566              $@Role│0    │
 ╰────────────────────────┴─────╯
 
-╭────┬─────────┬─────────┬─────────┬─────────╮
-│Case│    s1   │    s2   │    s3   │    s4   │
-├────┼─────────┼─────────┼─────────┼─────────┤
-│1   │1        │1        │1        │xyzzyquux│
-│2   │1        │1        │        z│30       │
-│3   │1        │2        │1        │8        │
-│4   │1        │2        │2        │20       │
-│5   │2        │1        │1        │2        │
-│6   │2        │1        │2        │22       │
-│7   │2        │2        │1        │1        │
-│8   │2        │2        │2        │3        │
-╰────┴─────────┴─────────┴─────────┴─────────╯
+╭────┬──┬──┬───┬─────────┬──────────────────────────────────────────────────────────────╮
+│Case│s1│s2│ s3│    s4   │                             s566                             │
+├────┼──┼──┼───┼─────────┼──────────────────────────────────────────────────────────────┤
+│1   │1 │1 │1  │xyzzyquux│abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│    │  │  │   │         │abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│    │  │  │   │         │abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│    │  │  │   │         │abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│    │  │  │   │         │abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│    │  │  │   │         │abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│    │  │  │   │         │abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│    │  │  │   │         │abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│    │  │  │   │         │abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│2   │1 │2 │1  │8        │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxx                                             │
+╰────┴──┴──┴───┴─────────┴──────────────────────────────────────────────────────────────╯
index 6f7dd8efc59237273589b9bc8d803c7f46bb5f7b..4cc7d6ecae1cbb35d2c9efc3114a330201099b56 100644 (file)
@@ -5,33 +5,22 @@
 │       Version        │1.2.3               │
 ├──────────────────────┼────────────────────┤
 │       Compression    │None                │
-│       Number of Cases│                   8
+│       Number of Cases│                   2
 ╰──────────────────────┴────────────────────╯
 
 ╭─────────┬─╮
-│Variables│4
+│Variables│5
 ╰─────────┴─╯
 
-╭──┬────────┬─────┬─────────────────┬─────┬─────┬─────────┬────────────┬────────────┬───────────────────────────╮
-│  │Position│Label│Measurement Level│ Role│Width│Alignment│Print Format│Write Format│       Missing Values      │
-├──┼────────┼─────┼─────────────────┼─────┼─────┼─────────┼────────────┼────────────┼───────────────────────────┤
-│s1│       1│     │Nominal          │Input│    9│Left     │A9          │A9          │"0"                        │
-│s2│       2│     │Nominal          │Input│    9│Left     │A9          │A9          │"12"; "123"                │
-│s3│       3│     │Nominal          │Input│    9│Left     │A9          │A9          │"1234"; "12345"; "12345678"│
-│s4│       4│     │Nominal          │Input│    9│Left     │A9          │A9          │                           │
-╰──┴────────┴─────┴─────────────────┴─────┴─────┴─────────┴────────────┴────────────┴───────────────────────────╯
-
-╭────────────────────────┬──────────────────╮
-│Variable Value          │                  │
-├────────────────────────┼──────────────────┤
-│s1             abc      │First value label │
-│               abcdefgh │Second value label│
-│               abcdefghi│Third value label │
-├────────────────────────┼──────────────────┤
-│s2             0        │Fourth value label│
-│               01234567 │Fifth value label │
-│               012345678│Sixth value label │
-╰────────────────────────┴──────────────────╯
+╭────┬────────┬─────┬─────────────────┬─────┬─────┬─────────┬────────────┬────────────┬──────────────╮
+│    │Position│Label│Measurement Level│ Role│Width│Alignment│Print Format│Write Format│Missing Values│
+├────┼────────┼─────┼─────────────────┼─────┼─────┼─────────┼────────────┼────────────┼──────────────┤
+│s1  │       1│     │Nominal          │Input│    1│Left     │A1          │A1          │              │
+│s2  │       2│     │Nominal          │Input│    2│Left     │A2          │A2          │              │
+│s3  │       3│     │Nominal          │Input│    3│Left     │A3          │A3          │              │
+│s4  │       4│     │Nominal          │Input│    9│Left     │A9          │A9          │              │
+│s566│       5│     │Nominal          │Input│   32│Left     │A566        │A566        │              │
+╰────┴────────┴─────┴─────────────────┴─────┴─────┴─────────┴────────────┴────────────┴──────────────╯
 
 ╭────────────────────────┬─────╮
 │Variable and Name       │Value│
 │s3                $@Role│0    │
 ├────────────────────────┼─────┤
 │s4                $@Role│0    │
+├────────────────────────┼─────┤
+│s566              $@Role│0    │
 ╰────────────────────────┴─────╯
 
-╭────┬─────────┬─────────┬─────────┬─────────╮
-│Case│    s1   │    s2   │    s3   │    s4   │
-├────┼─────────┼─────────┼─────────┼─────────┤
-│1   │1        │1        │1        │xyzzyquux│
-│2   │1        │1        │        z│30       │
-│3   │1        │2        │1        │8        │
-│4   │1        │2        │2        │20       │
-│5   │2        │1        │1        │2        │
-│6   │2        │1        │2        │22       │
-│7   │2        │2        │1        │1        │
-│8   │2        │2        │2        │3        │
-╰────┴─────────┴─────────┴─────────┴─────────╯
+╭────┬──┬──┬───┬─────────┬──────────────────────────────────────────────────────────────╮
+│Case│s1│s2│ s3│    s4   │                             s566                             │
+├────┼──┼──┼───┼─────────┼──────────────────────────────────────────────────────────────┤
+│1   │1 │1 │1  │xyzzyquux│abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│    │  │  │   │         │abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│    │  │  │   │         │abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│    │  │  │   │         │abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│    │  │  │   │         │abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│    │  │  │   │         │abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│    │  │  │   │         │abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│    │  │  │   │         │abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│    │  │  │   │         │abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│2   │1 │2 │1  │8        │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxx                                             │
+╰────┴──┴──┴───┴─────────┴──────────────────────────────────────────────────────────────╯
index 41a64afcaaf26097a424446e014ccc32d1b7cfeb..11e64a4529dbbbff0927aa202bd5848408625ae1 100644 (file)
@@ -5,33 +5,22 @@
 │       Version        │1.2.3               │
 ├──────────────────────┼────────────────────┤
 │       Compression    │ZSAV                │
-│       Number of Cases│                   8
+│       Number of Cases│                   2
 ╰──────────────────────┴────────────────────╯
 
 ╭─────────┬─╮
-│Variables│4
+│Variables│5
 ╰─────────┴─╯
 
-╭──┬────────┬─────┬─────────────────┬─────┬─────┬─────────┬────────────┬────────────┬───────────────────────────╮
-│  │Position│Label│Measurement Level│ Role│Width│Alignment│Print Format│Write Format│       Missing Values      │
-├──┼────────┼─────┼─────────────────┼─────┼─────┼─────────┼────────────┼────────────┼───────────────────────────┤
-│s1│       1│     │Nominal          │Input│    9│Left     │A9          │A9          │"0"                        │
-│s2│       2│     │Nominal          │Input│    9│Left     │A9          │A9          │"12"; "123"                │
-│s3│       3│     │Nominal          │Input│    9│Left     │A9          │A9          │"1234"; "12345"; "12345678"│
-│s4│       4│     │Nominal          │Input│    9│Left     │A9          │A9          │                           │
-╰──┴────────┴─────┴─────────────────┴─────┴─────┴─────────┴────────────┴────────────┴───────────────────────────╯
-
-╭────────────────────────┬──────────────────╮
-│Variable Value          │                  │
-├────────────────────────┼──────────────────┤
-│s1             abc      │First value label │
-│               abcdefgh │Second value label│
-│               abcdefghi│Third value label │
-├────────────────────────┼──────────────────┤
-│s2             0        │Fourth value label│
-│               01234567 │Fifth value label │
-│               012345678│Sixth value label │
-╰────────────────────────┴──────────────────╯
+╭────┬────────┬─────┬─────────────────┬─────┬─────┬─────────┬────────────┬────────────┬──────────────╮
+│    │Position│Label│Measurement Level│ Role│Width│Alignment│Print Format│Write Format│Missing Values│
+├────┼────────┼─────┼─────────────────┼─────┼─────┼─────────┼────────────┼────────────┼──────────────┤
+│s1  │       1│     │Nominal          │Input│    1│Left     │A1          │A1          │              │
+│s2  │       2│     │Nominal          │Input│    2│Left     │A2          │A2          │              │
+│s3  │       3│     │Nominal          │Input│    3│Left     │A3          │A3          │              │
+│s4  │       4│     │Nominal          │Input│    9│Left     │A9          │A9          │              │
+│s566│       5│     │Nominal          │Input│   32│Left     │A566        │A566        │              │
+╰────┴────────┴─────┴─────────────────┴─────┴─────┴─────────┴────────────┴────────────┴──────────────╯
 
 ╭────────────────────────┬─────╮
 │Variable and Name       │Value│
 │s3                $@Role│0    │
 ├────────────────────────┼─────┤
 │s4                $@Role│0    │
+├────────────────────────┼─────┤
+│s566              $@Role│0    │
 ╰────────────────────────┴─────╯
 
-╭────┬─────────┬─────────┬─────────┬─────────╮
-│Case│    s1   │    s2   │    s3   │    s4   │
-├────┼─────────┼─────────┼─────────┼─────────┤
-│1   │1        │1        │1        │xyzzyquux│
-│2   │1        │1        │        z│30       │
-│3   │1        │2        │1        │8        │
-│4   │1        │2        │2        │20       │
-│5   │2        │1        │1        │2        │
-│6   │2        │1        │2        │22       │
-│7   │2        │2        │1        │1        │
-│8   │2        │2        │2        │3        │
-╰────┴─────────┴─────────┴─────────┴─────────╯
+╭────┬──┬──┬───┬─────────┬──────────────────────────────────────────────────────────────╮
+│Case│s1│s2│ s3│    s4   │                             s566                             │
+├────┼──┼──┼───┼─────────┼──────────────────────────────────────────────────────────────┤
+│1   │1 │1 │1  │xyzzyquux│abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│    │  │  │   │         │abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│    │  │  │   │         │abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│    │  │  │   │         │abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│    │  │  │   │         │abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│    │  │  │   │         │abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│    │  │  │   │         │abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│    │  │  │   │         │abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│    │  │  │   │         │abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789│
+│2   │1 │2 │1  │8        │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  │
+│    │  │  │   │         │xxxxxxxxxxxxxxxxx                                             │
+╰────┴──┴──┴───┴─────────┴──────────────────────────────────────────────────────────────╯