recutils - Quick Testing Session

Setup

export TMPDIR=/home/drw/recutils/tmp
export PATH=/home/drw/recutils/install/1.7.91a/bin:$PATH
(add-to-list 'load-path "~/recutils/install/1.7.91a/share/emacs/site-lisp/")
(require 'ob-rec)
(org-babel-do-load-languages
 'org-babel-load-languages
 '((rec . t)))

Using ideas from quick techniques

Flows of data between different parts of the system

There are paths through the system: rec2csv -> csv -> csv2rec -> … recins -> recset -> recdel -> …

Different interfaces

Files (rec and csv), stdio, emacs

Oracles

  • Diff
  • Timestamps
  • LibreOffice
  • recutils integrity checks

Bugs?

  • recins does not create non-existent files, in spite claiming it does.
  • recins changes the modified date of the file, even if (apparently) the file's contents do not change.
  • recset segfaults with only file argument.
  • Mixing decimal and hexadecimal numbers allows you to violate uniqueness constraints.
  • How do I get uuids?

Other ideas

  • Different date formats
  • Different %rec in one file cause problems?
  • Greater range of characters, e.g. I was having problems with control characters (which may or may not be due to recutils)
  • Are there code injection vectors for C?
Id = 1
Id Charter OS Build Strategy Start Tester Duration Test_Design_and_Execution Bug_Investigation_and_Reporting Session_Setup Charter_vs_Opportunity Data_Files Notes Bug Issue Issue_2 Issue_3
1 Generate record set for implementing SBTM at our organisation. Debian_GNU-Linux 1.7.91 Exploration & Analysis 3/22/18 19:00pm Ben Bitdiddle 0.5 100 0 0 100/0 "          
tco-jsb-010327-A.txt                                  
rl-jsb-010327-A.txt" "                                
Initial setup                                  
* Using the example from http://www.satisfice.com/sbtm/sample_session.htm as a template                                  
* Following the info manual                                  
* Attempting to use as many of the features as I reasonably can                                  
* Tried also to generate reports of the testing sessions                                  
                                   
Attempting a scenario/soap opera technique. Simulating a test team                                  
trying to implement SBTM.                                  
                                   
Taking on the persona of a manager:                                  
* Trying to make life easier for my testers                                  
* Trying to help me perform some mundane tasks e.g. generating reports                                
                                   
I imagine that after generating this first version of my record set I                                
will want some of my testers to use it and give feedback. I will then                                  
make tweaks. [There is probably a risk involved with tweaking record                                  
sets and then trying to use data which was designed for a previous                                  
revision. In this sense this is ""risk-based"" but can I discover                                
problems I have not anticipated? See below…]                                  
                                   
[What are my oracles?                                  
* Feelings: Do the fictional testing personae feel friction                                  
frustration obstacles to getting job done?]                                
                                   
[Will I know if things are successful for this fictional test team?]                                  
,Could not get recsel to recognise ""4/16/01 11:15pm"" as a date" When using %typedef, can I declare a type with more than one property? What is a good way of generating reports which include time-stamps and aggregated data? What is a good way of more than one person sharing/combining record sets?                            
Location = 'loaned'
Title Author Date Location
The Colour of Magic Terry Pratchett 4/20/01 11:15pm loaned

recins

recset

Running:

recset -n0 -fRating -aExcellent test.rec
Segmentation fault

Curious. The file has two types of records. I wonder if I only select one:

recset -tBook -n0 -fRating -aExcellent test.rec
recset: error: operation aborted due to integrity failures.
recset: error: use --verbose to get a detailed report.
recset: error: use --force to skip the integrity check.

Checking the file, the first record has:

%type: Location enum loaned home unknown
...
Location:
+ home
+ work

Perhaps Location can only have one value. I can use recset to fix this.

recset -tBook -n0 -fLocation -shome test.rec

And try again.

recset -tBook -n0 -fRating -aExcellent test.rec

Successful.

Imagine if I have lots of books at work, change my job, and so move all my books back to home. There did not seem to be a way of removing a single value from a field, but perhaps using pipes…. Or, can I duplicate a record to represent the fact I have two copies?

For the present, I want to modify an existing field to escape the newlines.

modified=$(recsel -e"Id = 1" -PNotes sessions.rec | sed -z 's/\n/ \\\n/g' | sed 's/^+/ /g')
recset -e"Id = 1" -fNotes -s"$modified" sessions.rec

Not successful. It starts each line with "+". It seems to be able to be able to recognise multiline input and deal with it appropriately.

Would probably be smarter to use sed to remove newlines entirely.

modified=$(recsel -e"Id = 1" -PNotes sessions.rec | sed -z 's/\n/ /g' | sed 's/^+ //g')
recset -e"Id = 1" -fNotes -s"$modified" sessions.rec
Id = 1
Id Charter OS Build Strategy Start Tester Duration Test_Design_and_Execution Bug_Investigation_and_Reporting Session_Setup Charter_vs_Opportunity Data_Files Notes Bug Issue Issue_2 Issue_3
1 Generate record set for implementing SBTM at our organisation. Debian_GNU-Linux 1.7.91 Exploration & Analysis 3/22/18 19:00pm Ben Bitdiddle 0.5 100 0 0 100/0 + tco-jsb-010327-A.txt + rl-jsb-010327-A.txt Initial setup * Using the example from http://www.satisfice.com/sbtm/sample_session.htm as a template * Following the info manual * Attempting to use as many of the features as I reasonably can * Tried also to generate reports of the testing sessions Attempting a scenario/soap opera technique. Simulating a test team trying to implement SBTM. Taking on the persona of a manager: * Trying to make life easier for my testers * Trying to help me perform some mundane tasks, e.g. generating reports I imagine that after generating this first version of my record set, I will want some of my testers to use it and give feedback. I will then make tweaks. [There is probably a risk involved with tweaking record sets and then trying to use data which was designed for a previous revision. In this sense this is "risk-based", but can I discover problems I have not anticipated? See below…] [What are my oracles? * Feelings: Do the fictional testing personae feel friction, frustration, obstacles to getting job done?] [Will I know if things are successful for this fictional test team?] Could not get recsel to recognise "4/16/01 11:15pm" as a date When using %typedef, can I declare a type with more than one property? What is a good way of generating reports which include time-stamps and aggregated data? What is a good way of more than one person sharing/combining record sets?

I wonder if it is possible to go back the other way? Used org-table-export to convert the above into a csv file.

csv2rec -t Session sessions.csv > sessions_imported.rec

sessions_import.rec is different from the original file in the whitespace of the "Notes" field, the record descriptors and the all apart from the first "Issues" field has numbers appended, e.g. "Issue_2".

I speculate that the whitespace is being lost by org-table or by org-table-export, not recutils. If I copy the field directly from the original file, I can search and find it in the above org-table. However, I cannot find it in the csv file produced by org-table-export, which suggests the string has been changed at this point and no longer matches.

recset --verbose -tSession -e"Id = 2" -fId -s02 sessions_evil.rec
Id = 2
Id: 02
Charter: Analyse Norbert's session report and decide what to do next.
Issue: Prevented from testing a lot of functionality due to recins bug
Notes: 
+ [Started investigating recins bug ("error renaming /tmp/...") but
+ decided to continue with the planned testing.]
+ 
+ Start by using recinf to see what I can about Norbert's session. Some
+ of the options (-n and -S) I couldn't get to work, at least not on
+ anonymous records.
+ 
+ recsel seems more likely. I couldn't get --collapse to work, if I have
+ understood it correctly.
+ 
+ Seem to be able to achive most if not all of
+ http://www.satisfice.com/sbtm/demo/reports/status.htm and its
+ sub-sections.
+ 
+ Tricky might be to store individual session reports in the way they
+ have in
+ http://www.satisfice.com/sbtm/demo/reports/s_by_datetime.htm. Either
+ we could just use recsel's functionality to find individual ones, or a
+ bit of bash-foo to generate separate files, or use recutils templates
+ to create HTML files with anchors for each record. Difficulty of
+ latter is that there isn't an easy way to print an entire record in a
+ template. Would have to put every field into the template and then not
+ sure how to deal with repeated fields like "Bug" or "Issue".
+ 
+ What next?
+ 
+ I could make a finished SBTM reporting product. But I think we already
+ know it is possible, or that any shortfalls we might have are going to
+ be pretty minimal.
+ 
+ I could attempt to achieve the same affect through:
+ * The C library
+ * Lisp
+ * Org
+ 
+ [But, is that a realistic scenario? Is this test team already happy
+ enough with what they have? And would I be getting any more
+ "coverage"? Or would I be covering the same ground but through
+ different interfaces?]
+ 
+ I could attempt other techniques to test recutils, e.g. coverage-based
+ or risk-based. I think I would need to get to the bottom of the
+ recins/recset etc. bug in order to test other parts of the product. [I
+ would also be introducing new members to the team and increasing the
+ amount of data in the project, which is more realistic.]
Bug: recsel --collapse did not collapse the fields
Bug: recinf -n and -S didn't change recinf's output
Bug: Constraint or type validation: "stdin:69: error: value too large.
+ Expected a size <= 62." Could this be nicer? Give the actual fieldname
+ at least?

With recfile starting:

%rec: Naughty String
recins --verbose -fFoo -vBar blns.rec
blns.rec:1: error: could not read external descriptor from file String.
recins: error: use --force to skip the integrity check.

From the info manual:

For those cases it is more convenient to use a "external descriptor". External descriptors can be built appending a file path to the '%rec' field value, like:

%rec: FSD_Entry /path/to/file.rec

The previous example indicates that a record descriptor describing the 'FSD_Entry' records shall be read from the file '/path/to/file.rec'.

Id fields and numerics

For:

%typedef: num_t range -0xffffffff 0xffffffff
%type: Num num_t
recins --verbose -tNaughty_String -fNum -v0 blns.rec
(null):: error: expected an integer between 1 and -1.
recins: error: use --force to skip the integrity check.
recins --force -tNaughty_String -fNum -v0 blns.rec

Recfile now has:

Id: 0x0

Id: 0
Num: 0
Id = 0
Id: 0x0

Id: 0
Num: 0

Violating uniqueness constraint. Although only after using "–force".

Try to fix this:

recset --verbose -tNaughty_String -e"Id = 0x0" -fId -s2 blns.rec
blns.rec:13: error: duplicated key value in field 'Id' in record
blns.rec:15: error: duplicated key value in field 'Id' in record
blns.rec:16: error: expected an integer between 1 and -1.
blns.rec:19: error: expected an integer between 1 and -1.
recset: error: use --force to skip the integrity check.

I am unable to select either the record Id=0 or Id=0x0, as it violates integrity checks.

recins --verbose -tNaughty_String -fId -v0x05 -fNum -v0 blns.rec
recins --verbose -tNaughty_String -fNum -v0 blns.rec
Id = 5
Id: 0x05
Num: 0

Id: 5
Num: 0
recins --verbose -tNaughty_String -fId -v0x06 -fNum -v0 blns.rec

More types of autogenerate fields

recfix --auto blns.rec

I cannot get uuids working. Perhaps a compile flag? Cannot see anything in the INSTALL, README or info documentation.

recset -fUuid -d blns.rec

Are dates normalised? Does it care about timezones, etc?

Naughty Strings: Numbers

Id = 1
recset --verbose -e"Id = 0" -fNum -S1.00 blns.rec
recset --verbose -e"Id = 1" -fString -Snull blns.rec
recset --verbose -e"Id = 1" -fNum -s1/2 blns.rec
strings=(0
1
1.00
$1.00
1/2
1E2
1E02
1E+02
-1
-1.00
-$1.00
-1/2
-1E2
-1E02
-1E+02
1/0
0/0
-2147483648/-1
-9223372036854775808/-1
-0
-0.0
+0
+0.0
0.00
0..0
.
0.0.0
0,00
0,,0
,
0,0,0
0.0/0
1.0/0.0
0.0/0.0
1,0/0,0
0,0/0,0
--1
-
-.
-,
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
NaN
Infinity
-Infinity
INF
1#INF
-1#IND
1#QNAN
1#SNAN
1#IND
0x0
0xffffffff
0xffffffffffffffff
0xabad1dea
123456789012345678901234567890123456789
1,000.00
1 000.00
1'000.00
1,000,000.00
1 000 000.00
1'000'000.00
1.000,00
1 000,00
1'000,00
1.000.000,00
1 000 000,00
1'000'000,00
01000
08
09
2.2250738585072011e-308)

for string in ${strings[@]}
do
    recins --verbose -tNaughty_String -fNum -v$string blns.rec
done
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > drw@drw-t60:~/projects/testing/recutils$ drw@drw-t60:~/projects/testing/recutils$ > > > (null):: error: invalid 'range' value.
recins: error: use --force to skip the integrity check.
(null):: error: invalid 'range' value.
recins: error: use --force to skip the integrity check.
(null):: error: invalid 'range' value.
recins: error: use --force to skip the integrity check.
(null):: error: invalid 'range' value.
recins: error: use --force to skip the integrity check.
(null):: error: invalid 'range' value.
recins: error: use --force to skip the integrity check.
(null):: error: invalid 'range' value.
recins: error: use --force to skip the integrity check.
(null):: error: invalid 'range' value.
recins: error: use --force to skip the integrity check.
(null):: error: invalid 'range' value.
recins: error: use --force to skip the integrity check.
(null):: error: expected an integer between -255 and 255.
recins: error: use --force to skip the integrity check.
(null):: error: invalid 'range' value.
recins: error: use --force to skip the integrity check.
(null):: error: invalid 'range' value.
recins: error: use --force to skip the integrity check.
(null):: error: invalid 'range' value.
recins: error: use --force to skip the integrity check.
(null):: error: invalid 'range' value.
recins: error: use --force to skip the integrity check.
(null):: error: invalid 'range' value.
recins: error: use --force to skip the integrity check.
(null):: error: invalid 'range' value.
recins: error: use --force to skip the integrity check.
(null):: error: invalid 'range' value.
recins: error: use --force to skip the integrity check.
(null):: error: invalid 'range' value.
recins: error: use --force to skip the integrity check.
Segmentation fault
(null):: error: invalid 'range' value.
recins: error: use --force to skip the integrity check.
(null):: error: invalid 'range' value.
recins: error: use --force to skip the integrity check.
(null):: error: invalid 'range' value.
recins: error: use --force to skip the integrity check.
(null):: error: invalid 'range' value.
recins: error: use --force to skip the integrity check.
(null):: error: expected an integer between -255 and 255.
recins: error: use --force to skip the integrity check.
(null):: error: expected an integer between -255 and 255.
recins: error: use --force to skip the integrity check.
(null):: error: expected an integer between -255 and 255.
recins: error: use --force to skip the integrity check.
(null):: error: expected an integer between -255 and 255.
recins: error: use --force to skip the integrity check.
(null):: error: expected an integer between -255 and 255.
recins: error: use --force to skip the integrity check.
(null):: error: expected an integer between -255 and 255.
recins: error: use --force to skip the integrity check.
(null):: error: invalid 'range' value.
recins: error: use --force to skip the integrity check.
(null):: error: invalid 'range' value.
recins: error: use --force to skip the integrity check.
Num < 0 || Num > 0 || Num = 0
Date_Added: Wed, 18 Jul 2018 10:21:14 +0100
Id: 0
Num: 1.00
String: (null)

Date_Added: Wed, 18 Jul 2018 10:21:14 +0100
Id: 1
Num: 2.2250738585072011e-308
String: null

Date_Added: Wed, 18 Jul 2018 10:21:14 +0100
Id: 2
Num: 0

Date_Added: Wed, 18 Jul 2018 10:21:14 +0100
Id: 3
Num: 0

Date_Added: Wed, 18 Jul 2018 10:21:14 +0100
Id: 4
Num: 0

Date_Added: Wed, 18 Jul 2018 10:21:14 +0100
Id: 0x05
Num: 0

Date_Added: Wed, 18 Jul 2018 10:21:14 +0100
Id: 5
Num: 0

Date_Added: Wed, 18 Jul 2018 10:21:14 +0100
Id: 6
Num: 0

Date_Added: Wed, 18 Jul 2018 10:21:14 +0100
Id: 0x06
Num: 0

Id: 7
Date_Added: Wed, 18 Jul 2018 11:06:04 +0100
Num: 0

Id: 8
Date_Added: Wed, 18 Jul 2018 11:06:04 +0100
Num: 1

Id: 9
Date_Added: Wed, 18 Jul 2018 11:06:04 +0100
Num: 1.00

Id: 11
Date_Added: Wed, 18 Jul 2018 11:06:04 +0100
Num: -1

Id: 12
Date_Added: Wed, 18 Jul 2018 11:06:04 +0100
Num: -1.00

Id: 17
Date_Added: Wed, 18 Jul 2018 11:06:04 +0100
Num: -0

Id: 18
Date_Added: Wed, 18 Jul 2018 11:06:04 +0100
Num: -0.0

Id: 19
Date_Added: Wed, 18 Jul 2018 11:06:04 +0100
Num: 0.00

Id: 35
Date_Added: Wed, 18 Jul 2018 11:06:05 +0100
Num: 0x0

Id: 36
Date_Added: Wed, 18 Jul 2018 11:06:05 +0100
Num: 0xffffffff

Id: 37
Date_Added: Wed, 18 Jul 2018 11:06:05 +0100
Num: 0xffffffffffffffff

Id: 38
Date_Added: Wed, 18 Jul 2018 11:06:05 +0100
Num: 123456789012345678901234567890123456789

Id: 40
Date_Added: Wed, 18 Jul 2018 11:06:05 +0100
Num: 1

Id: 41
Date_Added: Wed, 18 Jul 2018 11:06:05 +0100
Num: 000.00

Id: 43
Date_Added: Wed, 18 Jul 2018 11:06:05 +0100
Num: 1

Id: 44
Date_Added: Wed, 18 Jul 2018 11:06:05 +0100
Num: 000

Id: 45
Date_Added: Wed, 18 Jul 2018 11:06:05 +0100
Num: 000.00

Id: 47
Date_Added: Wed, 18 Jul 2018 11:06:05 +0100
Num: 1

Id: 50
Date_Added: Wed, 18 Jul 2018 11:06:06 +0100
Num: 1

Id: 51
Date_Added: Wed, 18 Jul 2018 11:06:06 +0100
Num: 000

Id: 53
Date_Added: Wed, 18 Jul 2018 11:06:06 +0100
Num: 2.2250738585072011e-308

Id=10,13-16 is missing; doesn't recognise "1/2" (which it doesn't claim to, although it does accept it). Id=20-34 missing; various odd formats. Id=39; Num=1,000.00 looks legit… Similarly Id=42,46,49,52?

Num < 0
Id: 11
Date_Added: Wed, 18 Jul 2018 11:06:04 +0100
Num: -1

Id: 12
Date_Added: Wed, 18 Jul 2018 11:06:04 +0100
Num: -1.00

Id: 36
Date_Added: Wed, 18 Jul 2018 11:06:05 +0100
Num: 0xffffffff

Id: 37
Date_Added: Wed, 18 Jul 2018 11:06:05 +0100
Num: 0xffffffffffffffff

Id: 38
Date_Added: Wed, 18 Jul 2018 11:06:05 +0100
Num: 123456789012345678901234567890123456789

Last 3 are incorrect.

Still a problem when the range is increased? Or type=int?

Naughty Strings: Strings

strStrings=(",./;'[]\-="
         "<>?:\"{}|_+"
         "\!@#$%^\&*()\`~"
         "Ω≈ç√∫˜µ≤≥÷"
         "ЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"
         "⁰⁴⁵"
         "田中さんにあげて下さい")

for strString in "${strStrings[@]}"
do
    recins --verbose -tNaughty_String -fString -v$strString blns.rec
done
cat blns.rec | recfmt -fblns.tmpl
ID: 0
Num: 1.00
String: (null)
Date: Wed, 18 Jul 2018 10:21:14 +0100
ID: 1
Num: 2.2250738585072011e-308
String: null
Date: Wed, 18 Jul 2018 10:21:14 +0100
ID: 2
Num: 0
String: 
Date: Wed, 18 Jul 2018 10:21:14 +0100
ID: 3
Num: 0
String: 
Date: Wed, 18 Jul 2018 10:21:14 +0100
ID: 4
Num: 0
String: 
Date: Wed, 18 Jul 2018 10:21:14 +0100
ID: 0x05
Num: 0
String: 
Date: Wed, 18 Jul 2018 10:21:14 +0100
ID: 5
Num: 0
String: 
Date: Wed, 18 Jul 2018 10:21:14 +0100
ID: 6
Num: 0
String: 
Date: Wed, 18 Jul 2018 10:21:14 +0100
ID: 0x06
Num: 0
String: 
Date: Wed, 18 Jul 2018 10:21:14 +0100
ID: 7
Num: 0
String: 
Date: Wed, 18 Jul 2018 11:06:04 +0100
ID: 8
Num: 1
String: 
Date: Wed, 18 Jul 2018 11:06:04 +0100
ID: 9
Num: 1.00
String: 
Date: Wed, 18 Jul 2018 11:06:04 +0100
ID: 10
Num: 1/2
String: 
Date: Wed, 18 Jul 2018 11:06:04 +0100
ID: 11
Num: -1
String: 
Date: Wed, 18 Jul 2018 11:06:04 +0100
ID: 12
Num: -1.00
String: 
Date: Wed, 18 Jul 2018 11:06:04 +0100
ID: 13
Num: -1/2
String: 
Date: Wed, 18 Jul 2018 11:06:04 +0100
ID: 14
Num: 1/0
String: 
Date: Wed, 18 Jul 2018 11:06:04 +0100
ID: 15
Num: 0/0
String: 
Date: Wed, 18 Jul 2018 11:06:04 +0100
ID: 16
Num: -9223372036854775808/-1
String: 
Date: Wed, 18 Jul 2018 11:06:04 +0100
ID: 17
Num: -0
String: 
Date: Wed, 18 Jul 2018 11:06:04 +0100
ID: 18
Num: -0.0
String: 
Date: Wed, 18 Jul 2018 11:06:04 +0100
ID: 19
Num: 0.00
String: 
Date: Wed, 18 Jul 2018 11:06:04 +0100
ID: 20
Num: 0..0
String: 
Date: Wed, 18 Jul 2018 11:06:04 +0100
ID: 21
Num: 0.0.0
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 22
Num: 0,00
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 23
Num: 0,,0
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 24
Num: 0,0,0
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 25
Num: 0.0/0
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 26
Num: 1.0/0.0
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 27
Num: 0.0/0.0
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 28
Num: 1,0/0,0
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 29
Num: 0,0/0,0
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 30
INF
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 31
IND
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 32
QNAN
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 33
SNAN
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 34
IND
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 35
Num: 0x0
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 36
Num: 0xffffffff
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 37
Num: 0xffffffffffffffff
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 38
Num: 123456789012345678901234567890123456789
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 39
Num: 1,000.00
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 40
Num: 1
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 41
Num: 000.00
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 42
Num: 1,000,000.00
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 43
Num: 1
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 44
Num: 000
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 45
Num: 000.00
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 46
Num: 1.000,00
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 47
Num: 1
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 48
Num: 000,00
String: 
Date: Wed, 18 Jul 2018 11:06:05 +0100
ID: 49
Num: 1.000.000,00
String: 
Date: Wed, 18 Jul 2018 11:06:06 +0100
ID: 50
Num: 1
String: 
Date: Wed, 18 Jul 2018 11:06:06 +0100
ID: 51
Num: 000
String: 
Date: Wed, 18 Jul 2018 11:06:06 +0100
ID: 52
Num: 000,00
String: 
Date: Wed, 18 Jul 2018 11:06:06 +0100
ID: 53
Num: 2.2250738585072011e-308
String: 
Date: Wed, 18 Jul 2018 11:06:06 +0100
ID: 54
Num: 
String: ,./;'[]\-=
Date: Wed, 18 Jul 2018 11:43:34 +0100
ID: 55
Num:
?:"{}|_+
Date: Wed, 18 Jul 2018 11:43:34 +0100
ID: 56
Num:
$%^\&*()`~
Date: Wed, 18 Jul 2018 11:43:34 +0100
ID: 57
Num: 
String: Ω≈ç√∫˜µ≤≥÷
Date: Wed, 18 Jul 2018 11:43:34 +0100
ID: 58
Num: 
String: ЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя
Date: Wed, 18 Jul 2018 11:43:34 +0100
ID: 59
Num: 
String: ⁰⁴⁵
Date: Wed, 18 Jul 2018 11:43:34 +0100
ID: 60
Num: 
String: 田中さんにあげて下さい
Date: Wed, 18 Jul 2018 11:43:34 +0100

What happened to Id=55 and 56? Actually, the full output from the shell is:

ID: 55
Num: 
String: <>?:"{}|_+
Date: Wed, 18 Jul 2018 11:43:34 +0100
ID: 56
Num: 
String: \!@#$%^\&*()`~
Date: Wed, 18 Jul 2018 11:43:34 +0100

So some sort of problem with org-babel.

[FSF Associate Member] [FSFE Associate Member]