- reorganized repository to match standard layout
diff --git a/test/cleantests.py b/test/cleantests.py
new file mode 100644
index 0000000..5872a87
--- /dev/null
+++ b/test/cleantests.py
@@ -0,0 +1,10 @@
+# removes all files created during testing
+import glob
+import os
+
+paths = []
+for pattern in [ '*.actual', '*.actual-rewrite', '*.rewrite', '*.process-output' ]:
+ paths += glob.glob( pattern )
+
+for path in paths:
+ os.unlink( path )
diff --git a/test/generate_expected.py b/test/generate_expected.py
new file mode 100644
index 0000000..a46e889
--- /dev/null
+++ b/test/generate_expected.py
@@ -0,0 +1,11 @@
+import glob
+import os.path
+for path in glob.glob( '*.json' ):
+ text = file(path,'rt').read()
+ target = os.path.splitext(path)[0] + '.expected'
+ if os.path.exists( target ):
+ print 'skipping:', target
+ else:
+ print 'creating:', target
+ file(target,'wt').write(text)
+
diff --git a/test/jsontestrunner.py b/test/jsontestrunner.py
new file mode 100644
index 0000000..ec05a91
--- /dev/null
+++ b/test/jsontestrunner.py
@@ -0,0 +1,64 @@
+# Simple implementation of a json test runner to run the test against json-py.
+
+import sys
+import os.path
+import json
+import types
+
+if len(sys.argv) != 2:
+ print "Usage: %s input-json-file", sys.argv[0]
+ sys.exit(3)
+
+input_path = sys.argv[1]
+base_path = os.path.splitext(input_path)[0]
+actual_path = base_path + '.actual'
+rewrite_path = base_path + '.rewrite'
+rewrite_actual_path = base_path + '.actual-rewrite'
+
+def valueTreeToString( fout, value, path = '.' ):
+ ty = type(value)
+ if ty is types.DictType:
+ fout.write( '%s={}\n' % path )
+ suffix = path[-1] != '.' and '.' or ''
+ names = value.keys()
+ names.sort()
+ for name in names:
+ valueTreeToString( fout, value[name], path + suffix + name )
+ elif ty is types.ListType:
+ fout.write( '%s=[]\n' % path )
+ for index, childValue in zip( xrange(0,len(value)), value ):
+ valueTreeToString( fout, childValue, path + '[%d]' % index )
+ elif ty is types.StringType:
+ fout.write( '%s="%s"\n' % (path,value) )
+ elif ty is types.IntType:
+ fout.write( '%s=%d\n' % (path,value) )
+ elif ty is types.FloatType:
+ fout.write( '%s=%.16g\n' % (path,value) )
+ elif value is True:
+ fout.write( '%s=true\n' % path )
+ elif value is False:
+ fout.write( '%s=false\n' % path )
+ elif value is None:
+ fout.write( '%s=null\n' % path )
+ else:
+ assert False and "Unexpected value type"
+
+def parseAndSaveValueTree( input, actual_path ):
+ root = json.read( input )
+ fout = file( actual_path, 'wt' )
+ valueTreeToString( fout, root )
+ fout.close()
+ return root
+
+def rewriteValueTree( value, rewrite_path ):
+ rewrite = json.write( value )
+ rewrite = rewrite[1:-1] # Somehow the string is quoted ! jsonpy bug ?
+ file( rewrite_path, 'wt').write( rewrite + '\n' )
+ return rewrite
+
+input = file( input_path, 'rt' ).read()
+root = parseAndSaveValueTree( input, actual_path )
+rewrite = rewriteValueTree( json.write( root ), rewrite_path )
+rewrite_root = parseAndSaveValueTree( rewrite, rewrite_actual_path )
+
+sys.exit( 0 )
diff --git a/test/runjsontests.py b/test/runjsontests.py
new file mode 100644
index 0000000..a5284fb
--- /dev/null
+++ b/test/runjsontests.py
@@ -0,0 +1,91 @@
+import sys
+import os
+import os.path
+import glob
+
+
+def compareOutputs( expected, actual, message ):
+ expected = expected.strip().replace('\r','').split('\n')
+ actual = actual.strip().replace('\r','').split('\n')
+ diff_line = 0
+ max_line_to_compare = min( len(expected), len(actual) )
+ for index in xrange(0,max_line_to_compare):
+ if expected[index].strip() != actual[index].strip():
+ diff_line = index + 1
+ break
+ if diff_line == 0 and len(expected) != len(actual):
+ diff_line = max_line_to_compare+1
+ if diff_line == 0:
+ return None
+ def safeGetLine( lines, index ):
+ index += -1
+ if index >= len(lines):
+ return ''
+ return lines[index].strip()
+ return """ Difference in %s at line %d:
+ Expected: '%s'
+ Actual: '%s'
+""" % (message, diff_line,
+ safeGetLine(expected,diff_line),
+ safeGetLine(actual,diff_line) )
+
+def safeReadFile( path ):
+ try:
+ return file( path, 'rt' ).read()
+ except IOError, e:
+ return '<File "%s" is missing: %s>' % (path,e)
+
+def runAllTests( jsontest_executable_path, input_dir = None ):
+ if not input_dir:
+ input_dir = os.getcwd()
+ tests = glob.glob( os.path.join( input_dir, '*.json' ) )
+ failed_tests = []
+ for input_path in tests:
+ print 'TESTING:', input_path,
+ pipe = os.popen( "%s %s" % (jsontest_executable_path, input_path) )
+ process_output = pipe.read()
+ status = pipe.close()
+ base_path = os.path.splitext(input_path)[0]
+ actual_output = safeReadFile( base_path + '.actual' )
+ actual_rewrite_output = safeReadFile( base_path + '.actual-rewrite' )
+ file(base_path + '.process-output','wt').write( process_output )
+ if status:
+ print 'parsing failed'
+ failed_tests.append( (input_path, 'Parsing failed:\n' + process_output) )
+ else:
+ expected_output_path = os.path.splitext(input_path)[0] + '.expected'
+ expected_output = file( expected_output_path, 'rt' ).read()
+ detail = ( compareOutputs( expected_output, actual_output, 'input' )
+ or compareOutputs( expected_output, actual_rewrite_output, 'rewrite' ) )
+ if detail:
+ print 'FAILED'
+ failed_tests.append( (input_path, detail) )
+ else:
+ print 'OK'
+
+ if failed_tests:
+ print
+ print 'Failure details:'
+ for failed_test in failed_tests:
+ print '* Test', failed_test[0]
+ print failed_test[1]
+ print
+ print 'Test results: %d passed, %d failed.' % (len(tests)-len(failed_tests),
+ len(failed_tests) )
+ return 1
+ else:
+ print 'All %d tests passed.' % len(tests)
+ return 0
+
+if __name__ == '__main__':
+ if len(sys.argv) < 1 or len(sys.argv) > 2:
+ print "Usage: %s jsontest-executable-path [input-testcase-directory]" % sys.argv[0]
+ sys.exit( 1 )
+
+ jsontest_executable_path = os.path.normpath( os.path.abspath( sys.argv[1] ) )
+ if len(sys.argv) > 1:
+ input_path = os.path.normpath( os.path.abspath( sys.argv[2] ) )
+ else:
+ input_path = None
+ status = runAllTests( jsontest_executable_path, input_path )
+ sys.exit( status )
\ No newline at end of file
diff --git a/test/test_array_01.expected b/test/test_array_01.expected
new file mode 100644
index 0000000..4aa8fb3
--- /dev/null
+++ b/test/test_array_01.expected
@@ -0,0 +1 @@
+.=[]
diff --git a/test/test_array_01.json b/test/test_array_01.json
new file mode 100644
index 0000000..60b0742
--- /dev/null
+++ b/test/test_array_01.json
@@ -0,0 +1 @@
+[]
diff --git a/test/test_array_02.expected b/test/test_array_02.expected
new file mode 100644
index 0000000..5b7c72a
--- /dev/null
+++ b/test/test_array_02.expected
@@ -0,0 +1,2 @@
+.=[]
+.[0]=1
diff --git a/test/test_array_02.json b/test/test_array_02.json
new file mode 100644
index 0000000..c02be12
--- /dev/null
+++ b/test/test_array_02.json
@@ -0,0 +1 @@
+[1]
diff --git a/test/test_array_03.expected b/test/test_array_03.expected
new file mode 100644
index 0000000..0ba568e
--- /dev/null
+++ b/test/test_array_03.expected
@@ -0,0 +1,6 @@
+.=[]
+.[0]=1
+.[1]=2
+.[2]=3
+.[3]=4
+.[4]=5
diff --git a/test/test_array_03.json b/test/test_array_03.json
new file mode 100644
index 0000000..ac8f422
--- /dev/null
+++ b/test/test_array_03.json
@@ -0,0 +1 @@
+[ 1, 2 , 3,4,5]
diff --git a/test/test_array_04.expected b/test/test_array_04.expected
new file mode 100644
index 0000000..db58c30
--- /dev/null
+++ b/test/test_array_04.expected
@@ -0,0 +1,5 @@
+.=[]
+.[0]=1
+.[1]="abc"
+.[2]=12.3
+.[3]=-4
diff --git a/test/test_array_04.json b/test/test_array_04.json
new file mode 100644
index 0000000..0755478
--- /dev/null
+++ b/test/test_array_04.json
@@ -0,0 +1 @@
+[1, "abc" , 12.3, -4]
diff --git a/test/test_array_05.expected b/test/test_array_05.expected
new file mode 100644
index 0000000..82ad484
--- /dev/null
+++ b/test/test_array_05.expected
@@ -0,0 +1,100 @@
+.=[]
+.[0]=1
+.[1]=2
+.[2]=3
+.[3]=4
+.[4]=5
+.[5]=6
+.[6]=7
+.[7]=8
+.[8]=9
+.[9]=10
+.[10]=11
+.[11]=12
+.[12]=13
+.[13]=14
+.[14]=15
+.[15]=16
+.[16]=17
+.[17]=18
+.[18]=19
+.[19]=20
+.[20]=21
+.[21]=22
+.[22]=23
+.[23]=24
+.[24]=25
+.[25]=26
+.[26]=27
+.[27]=28
+.[28]=29
+.[29]=30
+.[30]=31
+.[31]=32
+.[32]=33
+.[33]=34
+.[34]=35
+.[35]=36
+.[36]=37
+.[37]=38
+.[38]=39
+.[39]=40
+.[40]=41
+.[41]=42
+.[42]=43
+.[43]=44
+.[44]=45
+.[45]=46
+.[46]=47
+.[47]=48
+.[48]=49
+.[49]=50
+.[50]=51
+.[51]=52
+.[52]=53
+.[53]=54
+.[54]=55
+.[55]=56
+.[56]=57
+.[57]=58
+.[58]=59
+.[59]=60
+.[60]=61
+.[61]=62
+.[62]=63
+.[63]=64
+.[64]=65
+.[65]=66
+.[66]=67
+.[67]=68
+.[68]=69
+.[69]=70
+.[70]=71
+.[71]=72
+.[72]=73
+.[73]=74
+.[74]=75
+.[75]=76
+.[76]=77
+.[77]=78
+.[78]=79
+.[79]=80
+.[80]=81
+.[81]=82
+.[82]=83
+.[83]=84
+.[84]=85
+.[85]=86
+.[86]=87
+.[87]=88
+.[88]=89
+.[89]=90
+.[90]=91
+.[91]=92
+.[92]=93
+.[93]=94
+.[94]=95
+.[95]=96
+.[96]=97
+.[97]=98
+.[98]=99
diff --git a/test/test_array_05.json b/test/test_array_05.json
new file mode 100644
index 0000000..7809d6c
--- /dev/null
+++ b/test/test_array_05.json
@@ -0,0 +1 @@
+[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
\ No newline at end of file
diff --git a/test/test_array_06.expected b/test/test_array_06.expected
new file mode 100644
index 0000000..e087b63
--- /dev/null
+++ b/test/test_array_06.expected
@@ -0,0 +1,5 @@
+.=[]
+.[0]="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+.[1]="bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
+.[2]="ccccccccccccccccccccccc"
+.[3]="dddddddddddddddddddddddddddddddddddddddddddddddddddd"
diff --git a/test/test_array_06.json b/test/test_array_06.json
new file mode 100644
index 0000000..9777a64
--- /dev/null
+++ b/test/test_array_06.json
@@ -0,0 +1,4 @@
+[ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
+ "ccccccccccccccccccccccc",
+ "dddddddddddddddddddddddddddddddddddddddddddddddddddd" ]
\ No newline at end of file
diff --git a/test/test_basic_01.expected b/test/test_basic_01.expected
new file mode 100644
index 0000000..0527387
--- /dev/null
+++ b/test/test_basic_01.expected
@@ -0,0 +1 @@
+.=123456789
diff --git a/test/test_basic_01.json b/test/test_basic_01.json
new file mode 100644
index 0000000..57cf9b9
--- /dev/null
+++ b/test/test_basic_01.json
@@ -0,0 +1 @@
+0123456789
diff --git a/test/test_basic_02.expected b/test/test_basic_02.expected
new file mode 100644
index 0000000..9040e84
--- /dev/null
+++ b/test/test_basic_02.expected
@@ -0,0 +1 @@
+.=-123456789
diff --git a/test/test_basic_02.json b/test/test_basic_02.json
new file mode 100644
index 0000000..fe84da4
--- /dev/null
+++ b/test/test_basic_02.json
@@ -0,0 +1 @@
+-0123456789
diff --git a/test/test_basic_03.expected b/test/test_basic_03.expected
new file mode 100644
index 0000000..494278d
--- /dev/null
+++ b/test/test_basic_03.expected
@@ -0,0 +1,3 @@
+.=1.2345678
+
+
diff --git a/test/test_basic_03.json b/test/test_basic_03.json
new file mode 100644
index 0000000..feac150
--- /dev/null
+++ b/test/test_basic_03.json
@@ -0,0 +1,3 @@
+1.2345678
+
+
diff --git a/test/test_basic_04.expected b/test/test_basic_04.expected
new file mode 100644
index 0000000..659f744
--- /dev/null
+++ b/test/test_basic_04.expected
@@ -0,0 +1,2 @@
+.="abcdef"
+
diff --git a/test/test_basic_04.json b/test/test_basic_04.json
new file mode 100644
index 0000000..01374bd
--- /dev/null
+++ b/test/test_basic_04.json
@@ -0,0 +1,2 @@
+"abcdef"
+
diff --git a/test/test_basic_05.expected b/test/test_basic_05.expected
new file mode 100644
index 0000000..cb1cdad
--- /dev/null
+++ b/test/test_basic_05.expected
@@ -0,0 +1,2 @@
+.=null
+
diff --git a/test/test_basic_05.json b/test/test_basic_05.json
new file mode 100644
index 0000000..a6d4f5a
--- /dev/null
+++ b/test/test_basic_05.json
@@ -0,0 +1,2 @@
+null
+
diff --git a/test/test_basic_06.expected b/test/test_basic_06.expected
new file mode 100644
index 0000000..8b22731
--- /dev/null
+++ b/test/test_basic_06.expected
@@ -0,0 +1,2 @@
+.=true
+
diff --git a/test/test_basic_06.json b/test/test_basic_06.json
new file mode 100644
index 0000000..5d967af
--- /dev/null
+++ b/test/test_basic_06.json
@@ -0,0 +1,2 @@
+true
+
diff --git a/test/test_basic_07.expected b/test/test_basic_07.expected
new file mode 100644
index 0000000..4979ed5
--- /dev/null
+++ b/test/test_basic_07.expected
@@ -0,0 +1,2 @@
+.=false
+
diff --git a/test/test_basic_07.json b/test/test_basic_07.json
new file mode 100644
index 0000000..b7ee6c5
--- /dev/null
+++ b/test/test_basic_07.json
@@ -0,0 +1,2 @@
+false
+
diff --git a/test/test_basic_08.expected b/test/test_basic_08.expected
new file mode 100644
index 0000000..cb1cdad
--- /dev/null
+++ b/test/test_basic_08.expected
@@ -0,0 +1,2 @@
+.=null
+
diff --git a/test/test_basic_08.json b/test/test_basic_08.json
new file mode 100644
index 0000000..fe107f4
--- /dev/null
+++ b/test/test_basic_08.json
@@ -0,0 +1,3 @@
+// C++ style comment
+null
+
diff --git a/test/test_basic_09.expected b/test/test_basic_09.expected
new file mode 100644
index 0000000..cb1cdad
--- /dev/null
+++ b/test/test_basic_09.expected
@@ -0,0 +1,2 @@
+.=null
+
diff --git a/test/test_basic_09.json b/test/test_basic_09.json
new file mode 100644
index 0000000..e0cb089
--- /dev/null
+++ b/test/test_basic_09.json
@@ -0,0 +1,4 @@
+/* C style comment
+ */
+null
+
diff --git a/test/test_complex_01.expected b/test/test_complex_01.expected
new file mode 100644
index 0000000..44e753b
--- /dev/null
+++ b/test/test_complex_01.expected
@@ -0,0 +1,20 @@
+.={}
+.attribute=[]
+.attribute[0]="random"
+.attribute[1]="short"
+.attribute[2]="bold"
+.attribute[3]=12
+.attribute[4]={}
+.attribute[4].height=7
+.attribute[4].width=64
+.count=1234
+.name={}
+.name.aka="T.E.S.T."
+.name.id=123987
+.test={}
+.test.1={}
+.test.1.2={}
+.test.1.2.3={}
+.test.1.2.3.coord=[]
+.test.1.2.3.coord[0]=1
+.test.1.2.3.coord[1]=2
diff --git a/test/test_complex_01.json b/test/test_complex_01.json
new file mode 100644
index 0000000..fb2f86c
--- /dev/null
+++ b/test/test_complex_01.json
@@ -0,0 +1,17 @@
+{
+ "count" : 1234,
+ "name" : { "aka" : "T.E.S.T.", "id" : 123987 },
+ "attribute" : [
+ "random",
+ "short",
+ "bold",
+ 12,
+ { "height" : 7, "width" : 64 }
+ ],
+ "test": { "1" :
+ { "2" :
+ { "3" : { "coord" : [ 1,2] }
+ }
+ }
+ }
+}
diff --git a/test/test_integer_01.expected b/test/test_integer_01.expected
new file mode 100644
index 0000000..24aa29e
--- /dev/null
+++ b/test/test_integer_01.expected
@@ -0,0 +1 @@
+.=2147483647
diff --git a/test/test_integer_01.json b/test/test_integer_01.json
new file mode 100644
index 0000000..e82c7ad
--- /dev/null
+++ b/test/test_integer_01.json
@@ -0,0 +1,2 @@
+// Max signed integer
+2147483647
diff --git a/test/test_integer_02.expected b/test/test_integer_02.expected
new file mode 100644
index 0000000..dab99eb
--- /dev/null
+++ b/test/test_integer_02.expected
@@ -0,0 +1 @@
+.=-2147483648
diff --git a/test/test_integer_02.json b/test/test_integer_02.json
new file mode 100644
index 0000000..548764e
--- /dev/null
+++ b/test/test_integer_02.json
@@ -0,0 +1,2 @@
+// Min signed integer
+-2147483648
diff --git a/test/test_integer_03.expected b/test/test_integer_03.expected
new file mode 100644
index 0000000..dde3260
--- /dev/null
+++ b/test/test_integer_03.expected
@@ -0,0 +1 @@
+.=4294967295
diff --git a/test/test_integer_03.json b/test/test_integer_03.json
new file mode 100644
index 0000000..18aeaf6
--- /dev/null
+++ b/test/test_integer_03.json
@@ -0,0 +1,2 @@
+// Max unsigned integer
+4294967295
diff --git a/test/test_integer_04.expected b/test/test_integer_04.expected
new file mode 100644
index 0000000..8da9013
--- /dev/null
+++ b/test/test_integer_04.expected
@@ -0,0 +1,2 @@
+.=0
+
diff --git a/test/test_integer_04.json b/test/test_integer_04.json
new file mode 100644
index 0000000..8202483
--- /dev/null
+++ b/test/test_integer_04.json
@@ -0,0 +1,3 @@
+// Min unsigned integer
+0
+
diff --git a/test/test_integer_05.expected b/test/test_integer_05.expected
new file mode 100644
index 0000000..238d1d6
--- /dev/null
+++ b/test/test_integer_05.expected
@@ -0,0 +1,2 @@
+.=1
+
diff --git a/test/test_integer_05.json b/test/test_integer_05.json
new file mode 100644
index 0000000..4797790
--- /dev/null
+++ b/test/test_integer_05.json
@@ -0,0 +1,2 @@
+1
+
diff --git a/test/test_object_01.expected b/test/test_object_01.expected
new file mode 100644
index 0000000..8e0634e
--- /dev/null
+++ b/test/test_object_01.expected
@@ -0,0 +1 @@
+.={}
diff --git a/test/test_object_01.json b/test/test_object_01.json
new file mode 100644
index 0000000..69a88e3
--- /dev/null
+++ b/test/test_object_01.json
@@ -0,0 +1 @@
+{}
diff --git a/test/test_object_02.expected b/test/test_object_02.expected
new file mode 100644
index 0000000..2c9de06
--- /dev/null
+++ b/test/test_object_02.expected
@@ -0,0 +1,2 @@
+.={}
+.count=1234
diff --git a/test/test_object_02.json b/test/test_object_02.json
new file mode 100644
index 0000000..bd157ec
--- /dev/null
+++ b/test/test_object_02.json
@@ -0,0 +1 @@
+{ "count" : 1234 }
diff --git a/test/test_object_03.expected b/test/test_object_03.expected
new file mode 100644
index 0000000..235a28e
--- /dev/null
+++ b/test/test_object_03.expected
@@ -0,0 +1,4 @@
+.={}
+.attribute="random"
+.count=1234
+.name="test"
diff --git a/test/test_object_03.json b/test/test_object_03.json
new file mode 100644
index 0000000..0947a44
--- /dev/null
+++ b/test/test_object_03.json
@@ -0,0 +1,5 @@
+{
+ "count" : 1234,
+ "name" : "test",
+ "attribute" : "random"
+}
diff --git a/test/test_object_04.expected b/test/test_object_04.expected
new file mode 100644
index 0000000..cf4d7c3
--- /dev/null
+++ b/test/test_object_04.expected
@@ -0,0 +1,2 @@
+.={}
+.=1234
diff --git a/test/test_object_04.json b/test/test_object_04.json
new file mode 100644
index 0000000..f1e364a
--- /dev/null
+++ b/test/test_object_04.json
@@ -0,0 +1,3 @@
+{
+ "" : 1234
+}
diff --git a/test/test_preserve_comment_01.expected b/test/test_preserve_comment_01.expected
new file mode 100644
index 0000000..b5616a9
--- /dev/null
+++ b/test/test_preserve_comment_01.expected
@@ -0,0 +1,3 @@
+.={}
+.first=1
+.second=2
diff --git a/test/test_preserve_comment_01.json b/test/test_preserve_comment_01.json
new file mode 100644
index 0000000..0291fff
--- /dev/null
+++ b/test/test_preserve_comment_01.json
@@ -0,0 +1,14 @@
+/* A comment
+ at the beginning of the file.
+ */
+{
+ "first" : 1, // comment after 'first' on the same line
+
+/* Comment before 'second'
+ */
+ "second" : 2
+}
+
+/* A comment at
+ the end of the file.
+ */
diff --git a/test/test_real_01.expected b/test/test_real_01.expected
new file mode 100644
index 0000000..57dee39
--- /dev/null
+++ b/test/test_real_01.expected
@@ -0,0 +1,2 @@
+.=8589934592
+
diff --git a/test/test_real_01.json b/test/test_real_01.json
new file mode 100644
index 0000000..5cb1bbf
--- /dev/null
+++ b/test/test_real_01.json
@@ -0,0 +1,3 @@
+// 2^33 => out of integer range, switch to double
+8589934592
+
diff --git a/test/test_real_02.expected b/test/test_real_02.expected
new file mode 100644
index 0000000..181592a
--- /dev/null
+++ b/test/test_real_02.expected
@@ -0,0 +1,2 @@
+.=-4294967295
+
diff --git a/test/test_real_02.json b/test/test_real_02.json
new file mode 100644
index 0000000..45092ef
--- /dev/null
+++ b/test/test_real_02.json
@@ -0,0 +1,3 @@
+// -2^32 => out of signed integer range, switch to double
+-4294967295
+
diff --git a/test/test_real_03.expected b/test/test_real_03.expected
new file mode 100644
index 0000000..181592a
--- /dev/null
+++ b/test/test_real_03.expected
@@ -0,0 +1,2 @@
+.=-4294967295
+
diff --git a/test/test_real_03.json b/test/test_real_03.json
new file mode 100644
index 0000000..45092ef
--- /dev/null
+++ b/test/test_real_03.json
@@ -0,0 +1,3 @@
+// -2^32 => out of signed integer range, switch to double
+-4294967295
+
diff --git a/test/test_real_04.expected b/test/test_real_04.expected
new file mode 100644
index 0000000..2f84bf1
--- /dev/null
+++ b/test/test_real_04.expected
@@ -0,0 +1,2 @@
+.=1.2345678
+
diff --git a/test/test_real_04.json b/test/test_real_04.json
new file mode 100644
index 0000000..7e71794
--- /dev/null
+++ b/test/test_real_04.json
@@ -0,0 +1,3 @@
+// 1.2345678
+12345678e-7
+
diff --git a/test/test_real_05.expected b/test/test_real_05.expected
new file mode 100644
index 0000000..168f6e8
--- /dev/null
+++ b/test/test_real_05.expected
@@ -0,0 +1,3 @@
+.=1234567.8
+
+
diff --git a/test/test_real_05.json b/test/test_real_05.json
new file mode 100644
index 0000000..950f6a7
--- /dev/null
+++ b/test/test_real_05.json
@@ -0,0 +1,3 @@
+// 1234567.8
+0.12345678e7
+
diff --git a/test/test_real_06.expected b/test/test_real_06.expected
new file mode 100644
index 0000000..45906e3
--- /dev/null
+++ b/test/test_real_06.expected
@@ -0,0 +1,3 @@
+.=-1.2345678
+
+
diff --git a/test/test_real_06.json b/test/test_real_06.json
new file mode 100644
index 0000000..dde1916
--- /dev/null
+++ b/test/test_real_06.json
@@ -0,0 +1,3 @@
+// -1.2345678
+-12345678e-7
+
diff --git a/test/test_real_07.expected b/test/test_real_07.expected
new file mode 100644
index 0000000..f2922f9
--- /dev/null
+++ b/test/test_real_07.expected
@@ -0,0 +1,3 @@
+.=-1234567.8
+
+
diff --git a/test/test_real_07.json b/test/test_real_07.json
new file mode 100644
index 0000000..dd43ba7
--- /dev/null
+++ b/test/test_real_07.json
@@ -0,0 +1,3 @@
+// -1234567.8
+-0.12345678e7
+