# arduino-serial-plotter-webapp msgAggregatorWorker.test.ts, "multi-field" over each delimiter;
# the third line of one shape is the first that plots
---
1,2 ⇒ {"rule": "plain", "level": "info", "message": "1,2", "values": []}
3,4 ⇒ {"rule": "plain", "level": "info", "message": "3,4", "values": []}
5,6 ⇒ {"rule": "plain+plotter", "level": "info", "message": "5,6", "prefixed": false, "values": [["value1", 5, null], ["value2", 6, null]]}
7,8 ⇒ {"rule": "plain+plotter", "level": "info", "message": "7,8", "values": [["value1", 7, null], ["value2", 8, null]]}
9,10 ⇒ {"rule": "plain+plotter", "level": "info", "message": "9,10", "values": [["value1", 9, null], ["value2", 10, null]]}
---
---
1 2  ⇒ {"rule": "plain", "level": "info", "message": "1 2 "}
3 4  ⇒ {"rule": "plain", "level": "info", "message": "3 4 "}
5 6  ⇒ {"rule": "plain+plotter", "level": "info", "message": "5 6 ", "values": [["value1", 5, null], ["value2", 6, null]]}
---
---
1	2 ⇒ {"rule": "plain", "level": "info", "message": "1\t2"}
3	4 ⇒ {"rule": "plain", "level": "info", "message": "3\t4"}
5	6 ⇒ {"rule": "plain+plotter", "level": "info", "message": "5\t6", "values": [["value1", 5, null], ["value2", 6, null]]}
7	8	 ⇒ {"rule": "plain+plotter", "level": "info", "message": "7\t8\t", "values": [["value1", 7, null], ["value2", 8, null]]}
---
---
# constructed 1,2,3, ⇒ {"rule": "plain", "level": "info", "message": "1,2,3,"}
# constructed 4,5,6, ⇒ {"rule": "plain", "level": "info", "message": "4,5,6,"}
# constructed 7,8,9, ⇒ {"rule": "plain+plotter", "level": "info", "message": "7,8,9,", "values": [["value1", 7, null], ["value2", 8, null], ["value3", 9, null]]}
# constructed -1.5,2e3,.25 ⇒ {"rule": "plain+plotter", "level": "info", "message": "-1.5,2e3,.25", "values": [["value1", -1.5, null], ["value2", 2000, null], ["value3", 0.25, null]]}
# constructed 1e999,2,3 ⇒ {"rule": "plain+plotter", "level": "info", "message": "1e999,2,3", "values": [["value2", 2, null], ["value3", 3, null]]}
---
# three analogRead() columns printed with Serial.print(" ")
---
# constructed 512 498 1023 ⇒ {"rule": "plain", "level": "info", "message": "512 498 1023"}
# constructed 511 499 1023 ⇒ {"rule": "plain", "level": "info", "message": "511 499 1023"}
# constructed 510 500 1022 ⇒ {"rule": "plain+plotter", "level": "info", "message": "510 500 1022", "values": [["value1", 510, null], ["value2", 500, null], ["value3", 1022, null]]}
# constructed 509 501 1021 ⇒ {"rule": "plain+plotter", "level": "info", "message": "509 501 1021", "values": [["value1", 509, null], ["value2", 501, null], ["value3", 1021, null]]}
# constructed 508 502 1020 ⇒ {"rule": "plain+plotter", "level": "info", "message": "508 502 1020", "values": [["value1", 508, null], ["value2", 502, null], ["value3", 1020, null]]}
---
# printf("%6d %6d\n") right-aligns its columns
---
# constructed     12     34 ⇒ {"rule": "plain", "level": "info", "message": "    12     34"}
# constructed    120    340 ⇒ {"rule": "plain", "level": "info", "message": "   120    340"}
# constructed   1200   3400 ⇒ {"rule": "plain+plotter", "level": "info", "message": "  1200   3400", "values": [["value1", 1200, null], ["value2", 3400, null]]}
# constructed  12000  34000 ⇒ {"rule": "plain+plotter", "level": "info", "message": " 12000  34000", "values": [["value1", 12000, null], ["value2", 34000, null]]}
---
# a shape change starts the count again
---
# constructed 1,2 ⇒ {"rule": "plain", "level": "info", "message": "1,2"}
# constructed 1,2 ⇒ {"rule": "plain", "level": "info", "message": "1,2"}
# constructed 1,2,3 ⇒ {"rule": "plain", "level": "info", "message": "1,2,3"}
# constructed 1,2,3 ⇒ {"rule": "plain", "level": "info", "message": "1,2,3"}
# constructed 1,2,3 ⇒ {"rule": "plain+plotter", "level": "info", "message": "1,2,3", "values": [["value1", 1, null], ["value2", 2, null], ["value3", 3, null]]}
---
---
# constructed [00:00:01.000,000] <inf> adc: 1 2 ⇒ {"rule": "zephyr", "level": "info", "name": "adc", "message": "adc: 1 2"}
# constructed [00:00:02.000,000] <inf> adc: 3 4 ⇒ {"rule": "zephyr", "level": "info", "name": "adc", "message": "adc: 3 4"}
# constructed [00:00:03.000,000] <inf> adc: 5 6 ⇒ {"rule": "zephyr+plotter", "level": "info", "name": "adc", "message": "adc: 5 6", "values": [["value1", 5, null], ["value2", 6, null]]}
---

---
v1.2.3 ⇒ {"rule": "plain", "level": "info", "message": "v1.2.3", "values": []}
v1.2.3 ⇒ {"rule": "plain", "level": "info", "message": "v1.2.3", "values": []}
v1.2.3 ⇒ {"rule": "plain", "level": "info", "message": "v1.2.3", "values": []}
---
---
# constructed 42 ⇒ {"rule": "plain", "level": "info", "message": "42", "values": []}
# constructed 42 ⇒ {"rule": "plain", "level": "info", "message": "42", "values": []}
# constructed 42 ⇒ {"rule": "plain", "level": "info", "message": "42", "values": []}
---
---
# constructed 1,2 ⇒ {"rule": "plain", "level": "info", "message": "1,2"}
# constructed 1,2,3 ⇒ {"rule": "plain", "level": "info", "message": "1,2,3"}
# constructed 1,2 ⇒ {"rule": "plain", "level": "info", "message": "1,2", "values": []}
---
---
# constructed 1,2 ⇒ {"rule": "plain", "level": "info", "message": "1,2"}
# constructed 1,2 ⇒ {"rule": "plain", "level": "info", "message": "1,2"}
# constructed seq=42 ⇒ {"rule": "plain+kv", "level": "info", "message": "seq=42"}
# constructed 1,2 ⇒ {"rule": "plain", "level": "info", "message": "1,2", "values": []}
---
---
# constructed 0x1F,0x2F ⇒ {"rule": "plain", "level": "info", "message": "0x1F,0x2F", "values": []}
# constructed 0x1F,0x2F ⇒ {"rule": "plain", "level": "info", "message": "0x1F,0x2F", "values": []}
# constructed 0x1F,0x2F ⇒ {"rule": "plain", "level": "info", "message": "0x1F,0x2F", "values": []}
---
---
# constructed 1.2.3,4 ⇒ {"rule": "plain", "level": "info", "message": "1.2.3,4", "values": []}
# constructed 1.2.3,4 ⇒ {"rule": "plain", "level": "info", "message": "1.2.3,4", "values": []}
# constructed 1.2.3,4 ⇒ {"rule": "plain", "level": "info", "message": "1.2.3,4", "values": []}
---
---
12:30 ⇒ {"rule": "plain", "level": "info", "message": "12:30", "values": []}
12:31 ⇒ {"rule": "plain", "level": "info", "message": "12:31", "values": []}
12:32 ⇒ {"rule": "plain", "level": "info", "message": "12:32", "values": []}
---
---
# constructed 1;2;3 ⇒ {"rule": "plain", "level": "info", "message": "1;2;3", "values": []}
# constructed 1;2;3 ⇒ {"rule": "plain", "level": "info", "message": "1;2;3", "values": []}
# constructed 1;2;3 ⇒ {"rule": "plain", "level": "info", "message": "1;2;3", "values": []}
---
---
# constructed nan,1 ⇒ {"rule": "plain", "level": "info", "message": "nan,1", "values": []}
# constructed nan,1 ⇒ {"rule": "plain", "level": "info", "message": "nan,1", "values": []}
# constructed nan,1 ⇒ {"rule": "plain", "level": "info", "message": "nan,1", "values": []}
---
---
I (954) MyModule: 54 68 65 20 77 61 79 20 74 6f 20 67 65 74 20 73 ⇒ {"rule": "esp-idf", "level": "info", "name": "MyModule", "message": "MyModule: 54 68 65 20 77 61 79 20 74 6f 20 67 65 74 20 73", "values": []}
I (964) MyModule: 74 61 72 74 65 64 20 69 73 20 61 6e 64 20 66 ⇒ {"rule": "esp-idf", "level": "info", "name": "MyModule", "message": "MyModule: 74 61 72 74 65 64 20 69 73 20 61 6e 64 20 66", "values": []}
# constructed I (974) MyModule: 74 61 72 74 65 64 20 69 73 20 61 6e 64 20 66 ⇒ {"rule": "esp-idf", "level": "info", "name": "MyModule", "message": "MyModule: 74 61 72 74 65 64 20 69 73 20 61 6e 64 20 66", "values": []}
---
# ESP_LOG_BUFFER_HEX prints "%02x " for each byte: a hex dump, not columns
---
# constructed I (123) tag: 10 20 30 40 50 60 70 80 ⇒ {"rule": "esp-idf", "level": "info", "name": "tag", "message": "tag: 10 20 30 40 50 60 70 80", "values": []}
# constructed I (133) tag: 10 20 30 40 50 60 70 80 ⇒ {"rule": "esp-idf", "level": "info", "name": "tag", "message": "tag: 10 20 30 40 50 60 70 80", "values": []}
# constructed I (143) tag: 10 20 30 40 50 60 70 80 ⇒ {"rule": "esp-idf", "level": "info", "name": "tag", "message": "tag: 10 20 30 40 50 60 70 80", "values": []}
---
# without a log prefix, eight two-digit columns are a plotter line
---
# constructed 12 34 56 78 90 11 22 33 ⇒ {"rule": "plain", "level": "info", "message": "12 34 56 78 90 11 22 33", "values": []}
# constructed 12 34 56 78 90 11 22 33 ⇒ {"rule": "plain", "level": "info", "message": "12 34 56 78 90 11 22 33", "values": []}
# constructed 12 34 56 78 90 11 22 33 ⇒ {"rule": "plain+plotter", "level": "info", "message": "12 34 56 78 90 11 22 33", "values": [["value1", 12, null], ["value2", 34, null], ["value3", 56, null], ["value4", 78, null], ["value5", 90, null], ["value6", 11, null], ["value7", 22, null], ["value8", 33, null]]}
---
# fewer bytes, or other separators, still plot
---
# constructed 10 20 30 40 ⇒ {"rule": "plain", "level": "info", "message": "10 20 30 40"}
# constructed 10 20 30 40 ⇒ {"rule": "plain", "level": "info", "message": "10 20 30 40"}
# constructed 10 20 30 40 ⇒ {"rule": "plain+plotter", "level": "info", "message": "10 20 30 40", "values": [["value1", 10, null], ["value2", 20, null], ["value3", 30, null], ["value4", 40, null]]}
---
---
# constructed 10,20,30,40,50,60,70,80 ⇒ {"rule": "plain", "level": "info", "message": "10,20,30,40,50,60,70,80"}
# constructed 10,20,30,40,50,60,70,80 ⇒ {"rule": "plain", "level": "info", "message": "10,20,30,40,50,60,70,80"}
# constructed 10,20,30,40,50,60,70,80 ⇒ {"rule": "plain+plotter", "level": "info", "message": "10,20,30,40,50,60,70,80", "values": [["value1", 10, null], ["value2", 20, null], ["value3", 30, null], ["value4", 40, null], ["value5", 50, null], ["value6", 60, null], ["value7", 70, null], ["value8", 80, null]]}
---
# a zero-padded column is decimal
---
# constructed 007 008 ⇒ {"rule": "plain", "level": "info", "message": "007 008", "values": []}
# constructed 007 008 ⇒ {"rule": "plain", "level": "info", "message": "007 008", "values": []}
# constructed 007 008 ⇒ {"rule": "plain+plotter", "level": "info", "message": "007 008", "values": [["value1", 7, null], ["value2", 8, null]]}
---
