}
}
-/// 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(
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)))
│ 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 │
+╰────┴──┴──┴───┴─────────┴──────────────────────────────────────────────────────────────╯
│ 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 │
+╰────┴──┴──┴───┴─────────┴──────────────────────────────────────────────────────────────╯
│ 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 │
+╰────┴──┴──┴───┴─────────┴──────────────────────────────────────────────────────────────╯