Updated output, added verify_output.py

This commit is contained in:
Bruce Eckel 2016-07-27 11:12:11 -06:00
parent 45133a4945
commit e84910951c
74 changed files with 524 additions and 855 deletions

View File

@ -21,8 +21,8 @@ public class AtUnitComposition {
}
/* Output:
annotations.AtUnitComposition
. _methodOne
. _methodTwo This is methodTwo
. _methodOne
OK (2 tests)
*/

View File

@ -39,11 +39,11 @@ annotations.AtUnitExample2
surprise!
(failed)
. assertExample
. assertAndReturn This is methodTwo
. exceptionExample java.io.FileNotFoundException:
nofile.txt (The system cannot find the file specified)
(failed)
. assertAndReturn This is methodTwo
(4 tests)
>>> 2 FAILURES <<<

View File

@ -30,9 +30,9 @@ public class AtUnitExample3 {
}
/* Output:
annotations.AtUnitExample3
. initialization
. methodOneTest
. m2 This is methodTwo
. methodOneTest
. initialization
OK (3 tests)
*/

View File

@ -46,10 +46,10 @@ public class AtUnitExample5 {
/* Output:
annotations.AtUnitExample5
. test1
Running cleanup
. test2
Running cleanup
. test3
Running cleanup
. test2
Running cleanup
OK (3 tests)
*/

View File

@ -17,8 +17,8 @@ public class AtUnitExternalTest extends AtUnitExample1 {
}
/* Output:
annotations.AtUnitExternalTest
. _methodOne
. _methodTwo This is methodTwo
. _methodOne
OK (2 tests)
*/

View File

@ -27,7 +27,7 @@ public class HashSetTest {
/* Output:
annotations.HashSetTest
. _remove
. initialization
. _contains
. initialization
OK (3 tests)
*/

View File

@ -31,8 +31,8 @@ public class StackLStringTest extends StackL<String> {
}
/* Output:
annotations.StackLStringTest
. _push
. _top
. _pop
. _top
. _push
OK (3 tests)
*/

View File

@ -16,6 +16,6 @@ public class BadMicroBenchmark {
}
}
/* Output:
setAll: 62
parallelSetAll: 75
setAll: 75
parallelSetAll: 110
*/

View File

@ -17,6 +17,6 @@ public class BadMicroBenchmark2 {
}
}
/* Output:
parallelSetAll: 83
setAll: 159
parallelSetAll: 68
setAll: 196
*/

View File

@ -27,8 +27,8 @@ public class BadMicroBenchmark3 {
}
}
/* Output:
parallelSetAll: 4948
setAll: 1204
parallelSetAll: 405
setAll: 557
parallelSetAll: 4540
setAll: 1540
parallelSetAll: 398
setAll: 739
*/

View File

@ -20,7 +20,7 @@ public class ParallelSort {
}
}
/* Output:
sort(): 864
parallelSort(): 274
sort(): 1237
parallelSort(): 344
3
*/

View File

@ -195,17 +195,17 @@ public class ListPerformance {
/* Output:
--- Array as List ---
size get set
100 44 44
100 50 68
--------------------- ArrayList ---------------------
size add get set iteradd insert remove
100 80 44 48 106 0 640
100 60 76 74 103 0 360
--------------------- LinkedList ---------------------
size add get set iteradd insert remove
100 80 106 94 177 0 120
100 200 166 114 201 0 120
----------------------- Vector -----------------------
size add get set iteradd insert remove
100 40 62 58 114 0 120
100 60 76 84 159 0 220
-------------------- Queue tests --------------------
size addFirst addLast rmFirst rmLast
100 60 120 120 100
100 80 160 100 120
*/

View File

@ -63,20 +63,20 @@ public class MapPerformance {
/* Output:
---------- TreeMap ----------
size put get iterate
100 228 128 25
100 286 152 35
---------- HashMap ----------
size put get iterate
100 68 26 35
100 86 38 44
------- LinkedHashMap -------
size put get iterate
100 70 35 18
100 92 27 28
------ IdentityHashMap ------
size put get iterate
100 128 126 38
100 298 101 42
-------- WeakHashMap --------
size put get iterate
100 62 31 25
100 88 36 57
--------- Hashtable ---------
size put get iterate
100 56 30 20
100 98 52 46
*/

View File

@ -60,11 +60,11 @@ public class SetPerformance {
/* Output:
------------- TreeSet -------------
size add contains iterate
100 200 132 24
100 256 162 31
------------- HashSet -------------
size add contains iterate
100 76 32 34
100 88 58 43
---------- LinkedHashSet ----------
size add contains iterate
100 70 25 19
100 100 46 23
*/

View File

@ -32,8 +32,8 @@ public enum ConstantSpecificMethod {
}
}
/* Output:
Jul 22, 2016
Jul 27, 2016
C:\Users\Bruce\Documents\GitHub\on-
java\ExtractedExamples\\gradle\wrapper\gradle-wrapper.jar
1.8.0_77
1.8.0_102
*/

View File

@ -33,13 +33,13 @@ public class LoggingExceptions {
}
/* Output:
___[ Error Output ]___
Jul 22, 2016 11:55:45 AM LoggingException <init>
Jul 27, 2016 10:50:30 AM LoggingException <init>
SEVERE: LoggingException
at
LoggingExceptions.main(LoggingExceptions.java:20)
Caught LoggingException
Jul 22, 2016 11:55:45 AM LoggingException <init>
Jul 27, 2016 10:50:30 AM LoggingException <init>
SEVERE: LoggingException
at
LoggingExceptions.main(LoggingExceptions.java:25)

View File

@ -25,7 +25,7 @@ public class LoggingExceptions2 {
}
/* Output:
___[ Error Output ]___
Jul 22, 2016 11:55:47 AM LoggingExceptions2 logException
Jul 27, 2016 10:50:30 AM LoggingExceptions2 logException
SEVERE: java.lang.NullPointerException
at
LoggingExceptions2.main(LoggingExceptions2.java:17)

View File

@ -59,7 +59,7 @@ Nope, that doesn't work.
test\bag
test\bar
test\baz
test\DIR_8460303386746117268
test\DIR_3697011820450773773
test\foo
test\Hello.txt
*********
@ -68,27 +68,27 @@ test\bag
test\bag\foo
test\bag\foo\bar
test\bag\foo\bar\baz
test\bag\foo\bar\baz\4101434906493986662.tmp
test\bag\foo\bar\baz\234245189903117886.tmp
test\bag\foo\bar\baz\File.txt
test\bar
test\bar\baz
test\bar\baz\bag
test\bar\baz\bag\foo
test\bar\baz\bag\foo\7816199470809856557.tmp
test\bar\baz\bag\foo\8752987828022262887.tmp
test\bar\baz\bag\foo\File.txt
test\baz
test\baz\bag
test\baz\bag\foo
test\baz\bag\foo\bar
test\baz\bag\foo\bar\5361615738906181780.tmp
test\baz\bag\foo\bar\465343347528104633.tmp
test\baz\bag\foo\bar\File.txt
test\DIR_8460303386746117268
test\DIR_8460303386746117268\pre8013004952693214586.non
test\DIR_3697011820450773773
test\DIR_3697011820450773773\pre3304897437567097054.non
test\foo
test\foo\bar
test\foo\bar\baz
test\foo\bar\baz\bag
test\foo\bar\baz\bag\7164453512868942303.tmp
test\foo\bar\baz\bag\2118206626074637804.tmp
test\foo\bar\baz\bag\File.txt
test\Hello.txt
*/

View File

@ -36,24 +36,24 @@ public class Find {
}
}
/* Output:
test\bag\foo\bar\baz\6081303161062291208.tmp
test\bag\foo\bar\baz\369594599218802549.tmp
test\bag\foo\bar\baz\File.txt
test\bar\baz\bag\foo\771297659941286896.tmp
test\bar\baz\bag\foo\2372197258227988384.tmp
test\bar\baz\bag\foo\File.txt
test\baz\bag\foo\bar\1769334171376700049.tmp
test\baz\bag\foo\bar\1091363470697614580.tmp
test\baz\bag\foo\bar\File.txt
test\dir.tmp
test\foo\bar\baz\bag\4483950466184961816.tmp
test\foo\bar\baz\bag\48863440153181406.tmp
test\foo\bar\baz\bag\File.txt
***************
6081303161062291208.tmp
771297659941286896.tmp
1769334171376700049.tmp
369594599218802549.tmp
2372197258227988384.tmp
1091363470697614580.tmp
dir.tmp
4483950466184961816.tmp
48863440153181406.tmp
***************
6081303161062291208.tmp
771297659941286896.tmp
1769334171376700049.tmp
4483950466184961816.tmp
369594599218802549.tmp
2372197258227988384.tmp
1091363470697614580.tmp
48863440153181406.tmp
*/

View File

@ -47,9 +47,9 @@ RegularFile: true
Writable: true
notExists: false
Hidden: false
size: 1631
size: 1630
FileStore: SSD (C:)
LastModified: : 2016-07-22T17:55:34.80143Z
LastModified: : 2016-07-27T15:52:49.898848Z
Owner: MINDVIEWTOSHIBA\Bruce (User)
ContentType: null
SymbolicLink: false

View File

@ -47,4 +47,7 @@ deleting test\bar\baz\bag\foo\File.txt
evt.context(): File.txt
evt.count(): 1
evt.kind(): ENTRY_DELETE
evt.context(): File.txt
evt.count(): 1
evt.kind(): ENTRY_DELETE
*/

View File

@ -60,6 +60,6 @@ public class DynamicProxyMixin {
}
/* Output:
Hello
1469210152348
1469638238271
1
*/

View File

@ -64,6 +64,6 @@ public class Mixins {
}
}
/* Output:
test string 1 1469210158525 1
test string 2 1469210158525 2
test string 1 1469638250315 1
test string 2 1469638250317 2
*/

View File

@ -50,52 +50,52 @@ public class ConfigureLogging {
Logger Name : com.mindviewinc.test Level: FINER
Logger Name : random Level: SEVERE
___[ Error Output ]___
Jul 22, 2016 11:55:52 AM ConfigureLogging sendLogMessages
Jul 27, 2016 10:50:38 AM ConfigureLogging sendLogMessages
FINEST: Finest
Jul 22, 2016 11:55:52 AM ConfigureLogging sendLogMessages
Jul 27, 2016 10:50:38 AM ConfigureLogging sendLogMessages
FINER: Finer
Jul 22, 2016 11:55:52 AM ConfigureLogging sendLogMessages
Jul 27, 2016 10:50:38 AM ConfigureLogging sendLogMessages
FINE: Fine
Jul 22, 2016 11:55:52 AM ConfigureLogging sendLogMessages
Jul 27, 2016 10:50:38 AM ConfigureLogging sendLogMessages
CONFIG: Config
Jul 22, 2016 11:55:52 AM ConfigureLogging sendLogMessages
Jul 27, 2016 10:50:38 AM ConfigureLogging sendLogMessages
INFO: Info
Jul 22, 2016 11:55:52 AM ConfigureLogging sendLogMessages
Jul 27, 2016 10:50:38 AM ConfigureLogging sendLogMessages
WARNING: Warning
Jul 22, 2016 11:55:52 AM ConfigureLogging sendLogMessages
Jul 27, 2016 10:50:38 AM ConfigureLogging sendLogMessages
SEVERE: Severe
Jul 22, 2016 11:55:52 AM ConfigureLogging sendLogMessages
Jul 27, 2016 10:50:38 AM ConfigureLogging sendLogMessages
FINEST: Finest
Jul 22, 2016 11:55:52 AM ConfigureLogging sendLogMessages
Jul 27, 2016 10:50:38 AM ConfigureLogging sendLogMessages
FINER: Finer
Jul 22, 2016 11:55:52 AM ConfigureLogging sendLogMessages
Jul 27, 2016 10:50:38 AM ConfigureLogging sendLogMessages
FINE: Fine
Jul 22, 2016 11:55:52 AM ConfigureLogging sendLogMessages
Jul 27, 2016 10:50:38 AM ConfigureLogging sendLogMessages
CONFIG: Config
Jul 22, 2016 11:55:52 AM ConfigureLogging sendLogMessages
Jul 27, 2016 10:50:38 AM ConfigureLogging sendLogMessages
INFO: Info
Jul 22, 2016 11:55:52 AM ConfigureLogging sendLogMessages
Jul 27, 2016 10:50:38 AM ConfigureLogging sendLogMessages
WARNING: Warning
Jul 22, 2016 11:55:52 AM ConfigureLogging sendLogMessages
Jul 27, 2016 10:50:38 AM ConfigureLogging sendLogMessages
SEVERE: Severe
Jul 22, 2016 11:55:52 AM ConfigureLogging sendLogMessages
Jul 27, 2016 10:50:38 AM ConfigureLogging sendLogMessages
INFO: Info
Jul 22, 2016 11:55:52 AM ConfigureLogging sendLogMessages
Jul 27, 2016 10:50:38 AM ConfigureLogging sendLogMessages
WARNING: Warning
Jul 22, 2016 11:55:52 AM ConfigureLogging sendLogMessages
Jul 27, 2016 10:50:38 AM ConfigureLogging sendLogMessages
SEVERE: Severe
Jul 22, 2016 11:55:52 AM ConfigureLogging sendLogMessages
Jul 27, 2016 10:50:38 AM ConfigureLogging sendLogMessages
FINER: Finer
Jul 22, 2016 11:55:52 AM ConfigureLogging sendLogMessages
Jul 27, 2016 10:50:38 AM ConfigureLogging sendLogMessages
FINE: Fine
Jul 22, 2016 11:55:52 AM ConfigureLogging sendLogMessages
Jul 27, 2016 10:50:38 AM ConfigureLogging sendLogMessages
CONFIG: Config
Jul 22, 2016 11:55:52 AM ConfigureLogging sendLogMessages
Jul 27, 2016 10:50:38 AM ConfigureLogging sendLogMessages
INFO: Info
Jul 22, 2016 11:55:52 AM ConfigureLogging sendLogMessages
Jul 27, 2016 10:50:38 AM ConfigureLogging sendLogMessages
WARNING: Warning
Jul 22, 2016 11:55:52 AM ConfigureLogging sendLogMessages
Jul 27, 2016 10:50:38 AM ConfigureLogging sendLogMessages
SEVERE: Severe
Jul 22, 2016 11:55:52 AM ConfigureLogging sendLogMessages
Jul 27, 2016 10:50:38 AM ConfigureLogging sendLogMessages
SEVERE: Severe
*/

View File

@ -40,8 +40,8 @@ public class CustomHandler {
, INFO:, CustomHandler:, main:, <Logging Info>,
]
___[ Error Output ]___
Jul 22, 2016 11:55:52 AM CustomHandler main
Jul 27, 2016 10:50:39 AM CustomHandler main
WARNING: Logging Warning
Jul 22, 2016 11:55:52 AM CustomHandler main
Jul 27, 2016 10:50:39 AM CustomHandler main
INFO: Logging Info
*/

View File

@ -14,6 +14,6 @@ public class InfoLogging {
}
/* Output:
___[ Error Output ]___
Jul 22, 2016 11:55:52 AM InfoLogging main
Jul 27, 2016 10:50:39 AM InfoLogging main
INFO: Logging: INFO-level message
*/

View File

@ -16,6 +16,6 @@ public class InfoLogging2 {
}
/* Output:
___[ Error Output ]___
Jul 22, 2016 11:55:53 AM InfoLogging2 main
Jul 27, 2016 10:50:40 AM InfoLogging2 main
INFO: Logging an INFO-level message
*/

View File

@ -17,6 +17,6 @@ public class LogToFile {
}
/* Output:
___[ Error Output ]___
Jul 22, 2016 11:55:53 AM LogToFile main
Jul 27, 2016 10:50:41 AM LogToFile main
INFO: A message logged to the file
*/

View File

@ -19,6 +19,6 @@ public class LogToFile2 {
}
/* Output:
___[ Error Output ]___
Jul 22, 2016 11:55:53 AM LogToFile2 main
Jul 27, 2016 10:50:41 AM LogToFile2 main
INFO: A message logged to the file
*/

View File

@ -76,109 +76,109 @@ onjava : FINEST com.mindviewinc.test : FINEST random :
FINEST
net level: FINEST
___[ Error Output ]___
Jul 22, 2016 11:55:53 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
SEVERE: com Severe
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
SEVERE: com.mindviewinc Severe
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
INFO: onjava Info
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
WARNING: onjava Warning
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
SEVERE: onjava Severe
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
SEVERE: com.mindviewinc.test Severe
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
INFO: random Info
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
WARNING: random Warning
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
SEVERE: random Severe
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
SEVERE: com Severe
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
SEVERE: com.mindviewinc Severe
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
INFO: onjava Info
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
WARNING: onjava Warning
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
SEVERE: onjava Severe
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
INFO: com.mindviewinc.test Info
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
WARNING: com.mindviewinc.test Warning
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
SEVERE: com.mindviewinc.test Severe
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
INFO: random Info
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
WARNING: random Warning
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
SEVERE: random Severe
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
INFO: com Info
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
WARNING: com Warning
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
SEVERE: com Severe
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
INFO: com.mindviewinc Info
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
WARNING: com.mindviewinc Warning
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
SEVERE: com.mindviewinc Severe
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
INFO: onjava Info
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
WARNING: onjava Warning
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
SEVERE: onjava Severe
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
INFO: com.mindviewinc.test Info
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
WARNING: com.mindviewinc.test Warning
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
SEVERE: com.mindviewinc.test Severe
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
INFO: random Info
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
WARNING: random Warning
Jul 22, 2016 11:55:54 AM LoggingLevelManipulation
Jul 27, 2016 10:50:42 AM LoggingLevelManipulation
printLogMessages
SEVERE: random Severe
*/

View File

@ -40,22 +40,22 @@ com level: SEVERE
individual loggers set to FINEST
com level: SEVERE
___[ Error Output ]___
Jul 22, 2016 11:55:54 AM LoggingLevels logMessages
Jul 27, 2016 10:50:42 AM LoggingLevels logMessages
INFO: util : info
Jul 22, 2016 11:55:54 AM LoggingLevels logMessages
Jul 27, 2016 10:50:42 AM LoggingLevels logMessages
SEVERE: test : severe
Jul 22, 2016 11:55:54 AM LoggingLevels logMessages
Jul 27, 2016 10:50:42 AM LoggingLevels logMessages
INFO: random : info
Jul 22, 2016 11:55:54 AM LoggingLevels logMessages
Jul 27, 2016 10:50:42 AM LoggingLevels logMessages
INFO: util : info
Jul 22, 2016 11:55:54 AM LoggingLevels logMessages
Jul 27, 2016 10:50:42 AM LoggingLevels logMessages
SEVERE: test : severe
Jul 22, 2016 11:55:54 AM LoggingLevels logMessages
Jul 27, 2016 10:50:42 AM LoggingLevels logMessages
INFO: random : info
Jul 22, 2016 11:55:54 AM LoggingLevels logMessages
Jul 27, 2016 10:50:42 AM LoggingLevels logMessages
INFO: util : info
Jul 22, 2016 11:55:54 AM LoggingLevels logMessages
Jul 27, 2016 10:50:42 AM LoggingLevels logMessages
SEVERE: test : severe
Jul 22, 2016 11:55:54 AM LoggingLevels logMessages
Jul 27, 2016 10:50:42 AM LoggingLevels logMessages
INFO: random : info
*/

View File

@ -20,8 +20,8 @@ public class MultipleHandlers {
}
/* Output:
___[ Error Output ]___
Jul 22, 2016 11:55:54 AM MultipleHandlers main
Jul 27, 2016 10:50:43 AM MultipleHandlers main
WARNING: Output to multiple handlers
Jul 22, 2016 11:55:54 AM MultipleHandlers main
Jul 27, 2016 10:50:43 AM MultipleHandlers main
WARNING: Output to multiple handlers
*/

View File

@ -21,6 +21,6 @@ public class MultipleHandlers2 {
}
/* Output:
___[ Error Output ]___
Jul 22, 2016 11:55:54 AM MultipleHandlers2 main
Jul 27, 2016 10:50:43 AM MultipleHandlers2 main
WARNING: Output to multiple handlers
*/

View File

@ -48,7 +48,7 @@ public class PrintableLogRecord extends LogRecord {
Level<FINEST>
LoggerName<null>
Message<Simple Log Record>
CurrentMillis<1469210155053>
CurrentMillis<1469638244376>
Params<null>
ResourceBundle<null>
ResourceBundleName<null>

View File

@ -34,12 +34,12 @@ public class SimpleFilter {
}
/* Output:
___[ Error Output ]___
Jul 22, 2016 11:55:55 AM SimpleFilter sendLogMessages
Jul 27, 2016 10:50:44 AM SimpleFilter sendLogMessages
WARNING: A duck in the house!
Jul 22, 2016 11:55:55 AM SimpleFilter sendLogMessages
Jul 27, 2016 10:50:44 AM SimpleFilter sendLogMessages
WARNING: A Wombat at large!
Jul 22, 2016 11:55:55 AM SimpleFilter main
Jul 27, 2016 10:50:44 AM SimpleFilter main
INFO: After setting filter..
Jul 22, 2016 11:55:55 AM SimpleFilter sendLogMessages
Jul 27, 2016 10:50:44 AM SimpleFilter sendLogMessages
WARNING: A duck in the house!
*/

View File

@ -16,5 +16,5 @@ public class WhoAmI {
}
/* Output:
MindviewToshibaLaptop
192.168.0.107
192.168.0.104
*/

View File

@ -22,5 +22,5 @@ public class HelloDate {
}
/* Output:
Hello, it's:
Fri Jul 22 11:55:55 MDT 2016
Wed Jul 27 10:50:45 MDT 2016
*/

View File

@ -16,7 +16,7 @@ public class ShowProperties {
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=C:\Program Files
(x86)\Java\jdk1.8.0_...
java.vm.version=25.77-b03
java.vm.version=25.102-b14
java.vm.vendor=Oracle Corporation
java.vendor.url=http://java.oracle.com/
path.separator=;
@ -29,7 +29,7 @@ sun.os.patch.level=
java.vm.specification.name=Java Virtual Machine
Specification
user.dir=C:\Users\Bruce\Documents\GitHub\on-ja...
java.runtime.version=1.8.0_77-b03
java.runtime.version=1.8.0_102-b14
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs=C:\Program Files (x86)\Java\jdk1.8.0_...
os.arch=x86

View File

@ -1,365 +0,0 @@
# Requires Python 3.5 or greater
# (c)2016 MindView LLC: see Copyright.txt
# We make no guarantees that this code is fit for any purpose.
# Visit http://mindviewinc.com/Books/OnJava/ for more book information.
"""
ToDo:
- Right now it's ignoring the "(first x lines)" examples
"""
import sys
from pathlib import Path
import re
import textwrap
from enum import Enum, unique
def trace(str): pass
# trace = print
maxlinewidth = 59
current_dir_name = Path.cwd().stem
word_only = re.compile("[A-Za-z]+")
def trim(block):
trimmed = "\n".join([ln.rstrip() for ln in block.splitlines()])
return trimmed.strip()
class Adjuster:
def adjust(self, input_text): pass
class IgnoreDigits(Adjuster):
def adjust(self, input_text):
trace("Ignoring digits")
return trim(re.sub("-?\d", "", input_text))
ignore_digits = IgnoreDigits()
class IgnoreMemoryAddresses(Adjuster):
def adjust(self, input_text):
return trim(memlocation.sub("", input_text))
ignore_memory_addresses = IgnoreMemoryAddresses()
class RemoveCharacters(Adjuster):
def __init__(self, chars_to_remove):
self.chars_to_remove = chars_to_remove
def adjust(self, input_text):
for c in self.chars_to_remove:
input_text = input_text.replace(c, "")
return input_text
class SortLines(Adjuster):
def adjust(self, input_text):
return "\n".join(sorted(input_text.splitlines())).strip()
sort_lines = SortLines()
class SortWords(Adjuster):
def adjust(self, input_text):
return "\n".join(sorted(input_text.split())).strip()
sort_words = SortWords()
class UniqueLines(Adjuster):
def adjust(self, input_text):
return "\n".join(sorted(list(set(input_text.splitlines()))))
unique_lines = UniqueLines()
class UniqueWords(Adjuster):
# Fairly extreme but will still reveal significant changes
def adjust(self, input_text):
return "\n".join(sorted(set(input_text.split())))
unique_words = UniqueWords()
class WordsOnly(Adjuster):
# Fairly extreme but will still reveal significant changes
def adjust(self, input_text):
return "\n".join(
sorted([w for w in input_text.split()
if word_only.fullmatch(w)]))
words_only = WordsOnly()
class IgnoreLines(Adjuster):
def __init__(self, *lines_to_ignore):
self.lines_to_ignore = lines_to_ignore
def adjust(self, input_text):
lines = input_text.splitlines()
for ignore in sorted(list(self.lines_to_ignore), reverse=True):
ignore = ignore - 1 # Compensate for zero indexing
print("ignoring line %d: %s" % (ignore, lines[ignore]))
del lines[ignore]
return "\n".join(lines)
match_adjustments = {
"ToastOMatic.java" : sort_lines,
"ThreadVariations.java" : sort_lines,
"ActiveObjectDemo.java" : [sort_lines, ignore_digits],
"Interrupting.java" : sort_lines,
"SyncObject.java" : sort_lines,
"UseCaseTracker.java" : sort_lines,
"AtUnitComposition.java" : sort_lines,
"AtUnitExample1.java" : sort_lines,
"AtUnitExample2.java" : sort_lines,
"AtUnitExample3.java" : sort_lines,
"AtUnitExample5.java" : sort_lines,
"AtUnitExternalTest.java" : sort_lines,
"HashSetTest.java" : sort_lines,
"StackLStringTest.java" : sort_lines,
"WaxOMatic2.java" : sort_lines,
"ForEach.java" : sort_words,
"PetCount4.java" : [RemoveCharacters("{}"), sort_words],
"CachedThreadPool.java" : words_only,
"FixedThreadPool.java" : words_only,
"MoreBasicThreads.java" : words_only,
"ConstantSpecificMethod.java" : words_only,
"BankTellerSimulation.java" : [words_only, unique_words],
"MapComparisons.java" : ignore_digits,
"ListComparisons.java" : ignore_digits,
"NotifyVsNotifyAll.java" : ignore_digits,
"SelfManaged.java" : ignore_digits,
"SimpleMicroBenchmark.java" : ignore_digits,
"SimpleThread.java" : ignore_digits,
"SleepingTask.java" : ignore_digits,
"ExchangerDemo.java" : ignore_digits,
"Compete.java" : ignore_digits,
"MappedIO.java" : ignore_digits,
"Directories.java" : ignore_digits,
"Find.java" : ignore_digits,
"PathAnalysis.java" : ignore_digits,
"TreeWatcher.java" : ignore_digits,
"Mixins.java" : ignore_digits,
"ListPerformance.java" : ignore_digits,
"MapPerformance.java" : ignore_digits,
"SetPerformance.java" : ignore_digits,
"SynchronizationComparisons.java" : ignore_digits,
"AtomicityTest.java" : ignore_digits,
"TypesForSets.java" : ignore_digits,
"PrintableLogRecord.java" : ignore_digits,
"LockingMappedFiles.java" : ignore_digits,
"Conversion.java" : IgnoreLines(27, 28),
"DynamicProxyMixin.java" : IgnoreLines(2),
"PreferencesDemo.java" : IgnoreLines(5),
"AtUnitExample4.java" : IgnoreLines(6, 9),
"SerialNumberChecker.java" : [ignore_digits, unique_lines],
"EvenSupplier.java" : [ignore_digits, unique_lines],
"FillingLists.java" : [ ignore_memory_addresses, sort_words ],
"SimpleDaemons.java" : [ ignore_memory_addresses, ignore_digits ],
"CaptureUncaughtException.java" : [
ignore_memory_addresses, ignore_digits, unique_lines ],
"CarBuilder.java" : [ ignore_digits, unique_lines ],
"CloseResource.java" : [ unique_lines ],
"SpringDetector.java" : [ ignore_digits, sort_words ],
"PipedIO.java" : [ unique_words ],
"CriticalSection.java" : ignore_digits,
"ExplicitCriticalSection.java" : ignore_digits,
}
translate_file_name = {
"ApplyTest.java": "Apply.java",
"FillTest.java": "Fill.java",
"Fill2Test.java": "Fill2.java",
"ClassInInterface$Test.java": "ClassInInterface.java",
"TestBed$Tester.java": "TestBed.java",
}
memlocation = re.compile("@[0-9a-z]{5,7}")
datestamp1 = re.compile("(?:[MTWFS][a-z]{2} ){0,1}[JFMASOND][a-z]{2} \d{1,2} \d{2}:\d{2}:\d{2} [A-Z]{3} \d{4}")
datestamp2 = re.compile("[JFMASOND][a-z]{2} \d{1,2}, \d{4} \d{1,2}:\d{1,2}:\d{1,2} (:?AM|PM)")
varying = [ memlocation, datestamp1, datestamp2 ]
# Result of Duet.validate():
Valid = Enum('Valid',
'exact varying execute_to_see selected_lines fail')
class Duet:
"""
Holds embedded and generated output. Also original file content, and
"adjusted" output for comparison.
"""
def __init__(self, out_filename):
if not (out_filename.suffix == ".out" or
out_filename.suffix == ".err" or
out_filename.suffix == ".new"):
print("Error: argument to Duet() must end with '.out' or '.err' or '.new'")
print("Argument was {}".format(out_filename))
sys.exit()
self.java_file = None # Full contents of Java code file
self.java_slugline = None # First (marker) line of Java code file
self.out_path = out_filename.with_suffix(".out")
self.out = None
self.generated = ""
if self.out_path.exists():
self.out = self.out_path.read_text().strip()
trace("{} file exists".format(self.out_path))
self.generated = self.fill_to_width(self.out)
self.error = False
self.err_path = out_filename.with_suffix(".err")
if self.err_path.exists():
self.error = True
self.generated += "\n___[ Error Output ]___\n"
self.generated += self.fill_to_width(self.err_path.read_text())
trace("{} file exists".format(self.err_path))
self.new = None
self.new_path = out_filename.with_suffix(".new")
if self.new_path.exists():
self.new = self.new_path.read_text().strip()
print("{} file exists".format(self.new_path))
self.java_path = self.calculate_java_path()
# This also fills self.java_file and self.java_slugline:
self.embedded = self.embedded_output()
self.ignore = False
if "{IgnoreOutput}" in self.java_file:
self.ignore = True
trace("Ignoring .out for {}".format(self.java_path))
return
if "{ThrowsException}" in self.java_file:
self.generated = self.generated.strip() + "\n___[ Exception is Expected ]___"
trace("Exception expected for {}".format(self.java_path))
if "{ErrorOutputExpected}" in self.java_file:
self.generated = self.generated.strip() + "\n___[ Error Output is Expected ]___"
trace("OK: 'Error Output' expected for {}".format(self.java_path))
self.embedded_adjusted = self.adjust(self.embedded)
self.generated_un_adjusted = self.generated
self.generated_adjusted = None
if self.generated:
self.generated_adjusted = self.adjust(self.generated)
def calculate_java_path(self):
def __java_filename(out_pieces):
path_components = out_pieces.split(".", out_pieces.count(".") - 1)
# path_components[-1] = path_components[-1].replace(".out", ".java")
# path_components[-1] = path_components[-1].replace(".err", ".java")
return path_components
_java_path = self.out_path.with_suffix(".java")
jfn = __java_filename(_java_path.parts[-1])
# jfn = __java_filename(self.out_path.parts[-1])
jpath = list(self.out_path.parts[:-1]) + list(jfn)
if len(jpath) > 1 and jpath[0] == jpath[1]:
del jpath[0]
if jpath[0] == current_dir_name:
del jpath[0]
if jpath[-1] in translate_file_name:
jpath[-1] = translate_file_name[jpath[-1]]
return Path(*jpath)
def embedded_output(self):
find_output = re.compile(r"/\* (Output:.*)\*/", re.DOTALL) # should space be \s+ ??
with self.java_path.open() as java:
self.java_file = java.read()
self.java_slugline = self.java_file.strip().splitlines()[0]
output = find_output.search(self.java_file)
if not output:
trace("No embedded output: in {}".format(self.java_path))
return None
lines = output.group(1).strip().splitlines()
self.output_tag = lines[0]
return ("\n".join(lines[1:])).strip()
@staticmethod
def fill_to_width(text):
result = ""
for line in text.splitlines():
result += textwrap.fill(line, width=maxlinewidth) + "\n"
return result.strip()
def __repr__(self):
# result = "\n" + str(self.output_tag)
result = "\n" + str(self.java_path).center(60, "=") + "\n" + self.embedded
result += "\n" + str(self.out_path).center(60, "-") + "\n" + self.generated
result += "\n" + (str(self.java_path) +
"(adjusted)").center(60, "-") + "\n" + str(self.embedded_adjusted)
result += "\n" + (str(self.out_path) +
"(adjusted)").center(60, "-") + "\n" + str(self.generated_adjusted)
difflines = []
embedded_adjusted_lines = self.embedded_adjusted.splitlines()
generated_adjusted_lines = self.generated_adjusted.splitlines()
trace(str(self.java_path))
trace("len embedded_adjusted %d len generated_adjusted %d" %
(len(embedded_adjusted_lines), len(generated_adjusted_lines)))
for n, line in enumerate(embedded_adjusted_lines):
try:
if not line == generated_adjusted_lines[n]:
difflines.append(">--------<")
difflines.append("embedded_adjusted: " + line)
difflines.append("generated_adjusted: " + generated_adjusted_lines[n])
except:
continue
if difflines:
result += "\n" + "\n".join(difflines)
return result
@staticmethod
def strip_varying(text):
for pat in varying:
text = pat.sub("", text)
return text
def adjust(self, output):
output = output.replace("\0", "NUL")
if self.java_path.name not in match_adjustments:
return output
trace("adjusting %s" % self.java_path.name)
strategy = match_adjustments[self.java_path.name]
if isinstance(strategy, Adjuster):
return strategy.adjust(output)
assert isinstance(strategy, list)
for strat in strategy:
output = strat.adjust(output)
return output
def validate(self):
if "(Execute to see)" in self.output_tag:
return Valid.execute_to_see
if "(None)" in self.output_tag: ### This should no longer be necessary
assert false, "(None) in output_tag " + self
if "Output: (First" in self.output_tag: ### This is temporary ###
return Valid.selected_lines
if self.generated_adjusted == self.embedded_adjusted:
return Valid.exact
if isinstance(self.generated_adjusted, str):
if (Duet.strip_varying(self.generated_adjusted) ==
Duet.strip_varying(self.embedded_adjusted)):
return Valid.varying
return Valid.fail

View File

@ -30,10 +30,10 @@ Location: Oz
Footwear: Ruby Slippers
Companions: 4
Are there witches?: true
UsageCount: 183
UsageCount: 191
How many companions does Dorothy have? 4
___[ Error Output ]___
Jul 22, 2016 11:56:00 AM java.util.prefs.WindowsPreferences
Jul 27, 2016 10:50:50 AM java.util.prefs.WindowsPreferences
<init>
WARNING: Could not open/create prefs root node
Software\JavaSoft\Prefs at root 0x80000002. Windows

View File

@ -81,6 +81,6 @@ public class Compete {
}
}
/* Output:
Duplication via serialization: 296 Milliseconds
Duplication via cloning: 20 Milliseconds
Duplication via serialization: 776 Milliseconds
Duplication via cloning: 122 Milliseconds
*/

View File

@ -42,11 +42,11 @@ public class Logon implements Serializable {
/* Output:
logon a = logon info:
username: Hulk
date: Fri Jul 22 11:56:03 MDT 2016
date: Wed Jul 27 10:50:53 MDT 2016
password: myLittlePony
Recovering object at Fri Jul 22 11:56:04 MDT 2016
Recovering object at Wed Jul 27 10:50:55 MDT 2016
logon a = logon info:
username: Hulk
date: Fri Jul 22 11:56:03 MDT 2016
date: Wed Jul 27 10:50:53 MDT 2016
password: null
*/

View File

@ -69,16 +69,16 @@ animals: [Bosco the dog[Animal@1db9742], House@106d69c
, Ralph the hamster[Animal@52e922], House@106d69c
, Molly the cat[Animal@25154f], House@106d69c
]
animals1: [Bosco the dog[Animal@10bedb4], House@103dbd3
, Ralph the hamster[Animal@167cf4d], House@103dbd3
, Molly the cat[Animal@a987ac], House@103dbd3
animals1: [Bosco the dog[Animal@1a4f24f], House@19a45b3
, Ralph the hamster[Animal@99a589], House@19a45b3
, Molly the cat[Animal@372a00], House@19a45b3
]
animals2: [Bosco the dog[Animal@10bedb4], House@103dbd3
, Ralph the hamster[Animal@167cf4d], House@103dbd3
, Molly the cat[Animal@a987ac], House@103dbd3
animals2: [Bosco the dog[Animal@1a4f24f], House@19a45b3
, Ralph the hamster[Animal@99a589], House@19a45b3
, Molly the cat[Animal@372a00], House@19a45b3
]
animals3: [Bosco the dog[Animal@a3a380], House@1453f44
, Ralph the hamster[Animal@ad8086], House@1453f44
, Molly the cat[Animal@be858], House@1453f44
animals3: [Bosco the dog[Animal@dd8dc3], House@103e736
, Ralph the hamster[Animal@8db2f2], House@103e736
, Molly the cat[Animal@18bf509], House@103e736
]
*/

View File

@ -23,6 +23,6 @@ public class ForEach {
}
/* Output:
258 555 693 861 961 429 868 200 522 207 288 128 551 589
551 589 200 522 868 861 288 128 207 555 429 693 961 258
551 589 200 861 522 429 868 961 288 555 128 693 207 258
258 555 693 861 961 429 868 200 522 207 288 128 551 589
*/

View File

@ -1,74 +0,0 @@
#! py -3
# Requires Python 3.5
# Validates output from executable Java programs in "On Java 8"
# (1) Extract output in Java file, keep whole file
# (2) If direct comparison of actual output with output stored in Java file fails:
# (3) Use chain of responsibility to successively try filters until one matches or all fail
from pathlib import Path
import textwrap
import re
def fill_to_width(text):
result = ""
for line in text.splitlines():
result += textwrap.fill(line, width=59) + "\n"
return result.strip()
def adjust_lines(text):
text = text.replace("\0", "NUL")
lines = text.splitlines()
slug = lines[0]
if "(First and Last " in slug:
num_of_lines = int(slug.split()[5])
adjusted = lines[:num_of_lines + 1] +\
["...________...________...________...________..."] +\
lines[-num_of_lines:]
return "\n".join(adjusted)
elif "(First " in slug:
num_of_lines = int(slug.split()[3])
adjusted = lines[:num_of_lines + 1] +\
[" ..."]
return "\n".join(adjusted)
else:
return text
def phase1():
"""
(0) Do first/last lines before formatting to width
(1) Combine output and error (if present) files
(2) Format all output to width limit
(3) Add closing '*/'
"""
for outfile in Path(".").rglob("*.out"):
out_text = adjust_lines(outfile.read_text())
phase_1 = outfile.with_suffix(".p1")
with phase_1.open('w') as phs1:
phs1.write(fill_to_width(out_text) + "\n")
errfile = outfile.with_suffix(".err")
if errfile.exists():
phs1.write("___[ Error Output ]___\n")
phs1.write(fill_to_width(errfile.read_text()) + "\n")
phs1.write("*/\n")
if __name__ == '__main__':
phase1()
find_output = re.compile(r"/\* (Output:.*)\*/", re.DOTALL) # should space be \s+ ??
for outfile in Path(".").rglob("*.p1"):
javafile = outfile.with_suffix(".java")
if not javafile.exists():
print(str(outfile) + " has no javafile")
javatext = javafile.read_text()
if "/* Output:" not in javatext:
print(str(outfile) + " has no /* Output:")
embedded_output = find_output.search(javatext).group(0).strip()
new_output = outfile.read_text().strip()
if new_output == embedded_output:
print(str(javafile))
else:
with outfile.with_suffix(".nomatch").open('w') as nomatch:
nomatch.write(str(embedded_output) + "\n\n")
nomatch.write("=== Actual ===\n\n")
nomatch.write(str(new_output))
print(" No Match ".center(45, "="))
for nomatch in Path(".").rglob("*.nomatch"):
print(nomatch)

View File

@ -29,5 +29,5 @@ public class AtomicityTest implements Runnable {
}
}
/* Output:
5
1
*/

View File

@ -56,5 +56,4 @@ tryLock(): true
tryLock(2, TimeUnit.SECONDS): true
tryLock(): true
tryLock(2, TimeUnit.SECONDS): true
acquired
*/

View File

@ -204,15 +204,15 @@ public class BankTellerSimulation {
[552][727][998][902][769][373][313][683][177][526] { T3 T2
T1 T0 }
TellerManager interrupted
Teller 3 interrupted
CustomerSupplier interrupted
Teller 3 terminating
Teller 2 interrupted
Teller 2 terminating
TellerManager terminating
Teller 1 interrupted
Teller 0 interrupted
Teller 0 terminating
Teller 1 interrupted
Teller 3 interrupted
Teller 2 interrupted
CustomerSupplier interrupted
CustomerSupplier terminating
Teller 2 terminating
Teller 3 terminating
Teller 1 terminating
TellerManager terminating
CustomerSupplier terminating
*/

View File

@ -16,14 +16,14 @@ public class CachedThreadPool {
}
}
/* Output:
SleepAndPrintTask[0] pool-1-thread-1
SleepAndPrintTask[5] pool-1-thread-6
SleepAndPrintTask[8] pool-1-thread-9
SleepAndPrintTask[4] pool-1-thread-5
SleepAndPrintTask[9] pool-1-thread-10
SleepAndPrintTask[1] pool-1-thread-2
SleepAndPrintTask[2] pool-1-thread-3
SleepAndPrintTask[9] pool-1-thread-10
SleepAndPrintTask[6] pool-1-thread-7
SleepAndPrintTask[5] pool-1-thread-6
SleepAndPrintTask[7] pool-1-thread-8
SleepAndPrintTask[8] pool-1-thread-9
SleepAndPrintTask[0] pool-1-thread-1
SleepAndPrintTask[1] pool-1-thread-2
SleepAndPrintTask[4] pool-1-thread-5
SleepAndPrintTask[3] pool-1-thread-4
*/

View File

@ -16,14 +16,14 @@ public class CachedThreadPool2 {
}
}
/* Output:
2 pool-1-thread-3 518
1 pool-1-thread-2 518
0 pool-1-thread-1 518
6 pool-1-thread-7 618
5 pool-1-thread-6 518
4 pool-1-thread-5 518
3 pool-1-thread-4 518
9 pool-1-thread-10 918
8 pool-1-thread-9 818
7 pool-1-thread-8 718
0 pool-1-thread-1 200
4 pool-1-thread-5 300
3 pool-1-thread-4 400
1 pool-1-thread-2 200
2 pool-1-thread-3 200
6 pool-1-thread-7 500
8 pool-1-thread-9 757
5 pool-1-thread-6 657
7 pool-1-thread-8 657
9 pool-1-thread-10 857
*/

View File

@ -33,15 +33,15 @@ public class CachedThreadPool3 {
}
}
/* Output:
3 pool-1-thread-4 100
5 pool-1-thread-6 100
6 pool-1-thread-7 100
1 pool-1-thread-2 100
2 pool-1-thread-3 100
6 pool-1-thread-7 100
5 pool-1-thread-6 100
7 pool-1-thread-8 100
8 pool-1-thread-9 100
4 pool-1-thread-5 100
0 pool-1-thread-1 100
9 pool-1-thread-10 100
3 pool-1-thread-4 100
0 pool-1-thread-1 100
1 pool-1-thread-2 100
8 pool-1-thread-9 100
sum = 1000
*/

View File

@ -54,7 +54,7 @@ run() by Thread-1
eh = MyUncaughtExceptionHandler@d93b30
HandlerThreadFactory@14991ad creating new Thread
created Thread[Thread-2,5,main]
eh = MyUncaughtExceptionHandler@28e402
eh = MyUncaughtExceptionHandler@1351c58
caught java.lang.RuntimeException
TimedAbort 4
*/

View File

@ -221,9 +221,9 @@ public class CarBuilder {
/* Output:
ChassisBuilder created Car 0 [ engine: false driveTrain:
false wheels: false ]
EngineRobot installing engine
WheelRobot installing Wheels
DriveTrainRobot installing DriveTrain
EngineRobot installing engine
Car 0 [ engine: true driveTrain: true wheels: true ]
ChassisBuilder created Car 1 [ engine: false driveTrain:
false wheels: false ]
@ -233,15 +233,15 @@ DriveTrainRobot installing DriveTrain
Car 1 [ engine: true driveTrain: true wheels: true ]
ChassisBuilder created Car 2 [ engine: false driveTrain:
false wheels: false ]
EngineRobot installing engine
DriveTrainRobot installing DriveTrain
WheelRobot installing Wheels
EngineRobot installing engine
Car 2 [ engine: true driveTrain: true wheels: true ]
ChassisBuilder created Car 3 [ engine: false driveTrain:
false wheels: false ]
EngineRobot installing engine
WheelRobot installing Wheels
DriveTrainRobot installing DriveTrain
WheelRobot installing Wheels
EngineRobot installing engine
Car 3 [ engine: true driveTrain: true wheels: true ]
ChassisBuilder created Car 4 [ engine: false driveTrain:
false wheels: false ]
@ -252,8 +252,8 @@ Car 4 [ engine: true driveTrain: true wheels: true ]
ChassisBuilder created Car 5 [ engine: false driveTrain:
false wheels: false ]
EngineRobot installing engine
DriveTrainRobot installing DriveTrain
WheelRobot installing Wheels
DriveTrainRobot installing DriveTrain
Car 5 [ engine: true driveTrain: true wheels: true ]
ChassisBuilder created Car 6 [ engine: false driveTrain:
false wheels: false ]
@ -270,26 +270,26 @@ Car 7 [ engine: true driveTrain: true wheels: true ]
ChassisBuilder created Car 8 [ engine: false driveTrain:
false wheels: false ]
EngineRobot installing engine
DriveTrainRobot installing DriveTrain
WheelRobot installing Wheels
DriveTrainRobot installing DriveTrain
Car 8 [ engine: true driveTrain: true wheels: true ]
ChassisBuilder created Car 9 [ engine: false driveTrain:
false wheels: false ]
DriveTrainRobot installing DriveTrain
WheelRobot installing Wheels
EngineRobot installing engine
WheelRobot installing Wheels
Car 9 [ engine: true driveTrain: true wheels: true ]
ChassisBuilder created Car 10 [ engine: false driveTrain:
false wheels: false ]
WheelRobot installing Wheels
DriveTrainRobot installing DriveTrain
EngineRobot installing engine
WheelRobot installing Wheels
Car 10 [ engine: true driveTrain: true wheels: true ]
ChassisBuilder created Car 11 [ engine: false driveTrain:
false wheels: false ]
DriveTrainRobot installing DriveTrain
WheelRobot installing Wheels
EngineRobot installing engine
WheelRobot installing Wheels
DriveTrainRobot installing DriveTrain
Car 11 [ engine: true driveTrain: true wheels: true ]
ChassisBuilder created Car 12 [ engine: false driveTrain:
false wheels: false ]
@ -297,16 +297,16 @@ DriveTrainRobot installing DriveTrain
WheelRobot installing Wheels
EngineRobot installing engine
Car 12 [ engine: true driveTrain: true wheels: true ]
Exiting Reporter via interrupt
Reporter off
Exiting EngineRobot via interrupt
EngineRobot off
Exiting DriveTrainRobot via interrupt
Exiting WheelRobot via interrupt
Interrupted: ChassisBuilder
Exiting Assembler via interrupt
ChassisBuilder off
WheelRobot off
Exiting EngineRobot via interrupt
Exiting WheelRobot via interrupt
Exiting DriveTrainRobot via interrupt
DriveTrainRobot off
Exiting Reporter via interrupt
Interrupted: ChassisBuilder
Reporter off
WheelRobot off
EngineRobot off
Assembler off
ChassisBuilder off
*/

View File

@ -17,15 +17,15 @@ public class CountingStream {
}
}
/* Output:
0 ForkJoinPool.commonPool-worker-4 100
4 ForkJoinPool.commonPool-worker-3 100
3 ForkJoinPool.commonPool-worker-5 100
6 main 100
8 ForkJoinPool.commonPool-worker-6 100
5 ForkJoinPool.commonPool-worker-7 100
4 ForkJoinPool.commonPool-worker-5 100
2 ForkJoinPool.commonPool-worker-1 100
1 ForkJoinPool.commonPool-worker-2 100
9 ForkJoinPool.commonPool-worker-3 100
6 main 100
5 ForkJoinPool.commonPool-worker-1 100
7 ForkJoinPool.commonPool-worker-4 100
1 ForkJoinPool.commonPool-worker-3 100
8 ForkJoinPool.commonPool-worker-2 100
0 ForkJoinPool.commonPool-worker-6 100
9 ForkJoinPool.commonPool-worker-7 100
3 ForkJoinPool.commonPool-worker-5 100
1000
*/

View File

@ -32,25 +32,25 @@ public class DeadlockingDiningPhilosophers {
}
}
/* Output: (First and Last 10 Lines)
Philosopher 2 thinking
Philosopher 3 thinking
Philosopher 3 grabbing right
Philosopher 3 grabbing left
Philosopher 3 eating
Philosopher 1 thinking
Philosopher 1 grabbing right
Philosopher 1 grabbing left
Philosopher 4 thinking
Philosopher 0 thinking
...________...________...________...________...
Philosopher 0 grabbing right
Philosopher 4 thinking
Philosopher 1 thinking
Philosopher 3 thinking
Philosopher 2 thinking
Philosopher 3 grabbing right
Philosopher 1 grabbing right
Philosopher 4 grabbing right
Philosopher 0 grabbing right
Philosopher 4 grabbing left
...________...________...________...________...
Philosopher 3 grabbing left
Philosopher 1 grabbing left
Philosopher 4 grabbing left
Philosopher 2 grabbing left
Philosopher 0 grabbing left
Philosopher 1 exiting via interrupt
Philosopher 0 exiting via interrupt
Philosopher 3 exiting via interrupt
Philosopher 4 exiting via interrupt
Philosopher 3 exiting via interrupt
Philosopher 2 exiting via interrupt
Philosopher 0 exiting via interrupt
*/

View File

@ -20,8 +20,7 @@ public class EvenSupplier extends IntSupplier {
}
/* Output:
Press Control-C to exit
23 not even!
27 not even!
25 not even!
193 not even!
191 not even!
TimedAbort 4
*/

View File

@ -52,12 +52,12 @@ public class ExplicitCriticalSection {
}
}
/* Output:
pm1: Pair: x: 10, y: 10 checkCounter = 3504848
pm2: Pair: x: 10, y: 10 checkCounter = 2105413
pm1: Pair: x: 10, y: 10 checkCounter = 1713716
pm2: Pair: x: 10, y: 10 checkCounter = 1717747
___[ Error Output ]___
Exception in thread "pool-1-thread-3" Exception in thread
"pool-1-thread-4" threads.Pair$PairValuesNotEqualException:
Pair values not equal: x: 3, y: 2
Exception in thread "pool-1-thread-4" Exception in thread
"pool-1-thread-3" threads.Pair$PairValuesNotEqualException:
Pair values not equal: x: 2, y: 1
at threads.Pair.checkState(CriticalSection.java:37)
at
threads.PairChecker.run(CriticalSection.java:111)
@ -67,7 +67,7 @@ r(ThreadPoolExecutor.java:1142)
un(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
threads.Pair$PairValuesNotEqualException: Pair values not
equal: x: 3, y: 2
equal: x: 2, y: 1
at threads.Pair.checkState(CriticalSection.java:37)
at
threads.PairChecker.run(CriticalSection.java:111)

View File

@ -36,25 +36,25 @@ public class FixedDiningPhilosophers {
}
}
/* Output: (First and Last 10 Lines)
Philosopher 0 thinking
Philosopher 4 thinking
Philosopher 3 thinking
Philosopher 2 thinking
Philosopher 1 thinking
Philosopher 0 grabbing right
Philosopher 4 thinking
Philosopher 2 thinking
Philosopher 0 thinking
Philosopher 3 thinking
Philosopher 1 grabbing right
Philosopher 2 grabbing right
Philosopher 4 grabbing right
Philosopher 4 grabbing left
Philosopher 4 eating
...________...________...________...________...
Philosopher 1 thinking
Philosopher 0 grabbing left
Philosopher 0 eating
Philosopher 3 grabbing right
Philosopher 2 grabbing right
...________...________...________...________...
Philosopher 4 thinking
Philosopher 3 grabbing left
Philosopher 3 eating
Philosopher 0 eating
Philosopher 4 grabbing right
Philosopher 2 eating
Philosopher 1 grabbing right
Philosopher 3 exiting via interrupt
Philosopher 0 exiting via interrupt
Philosopher 1 exiting via interrupt
Philosopher 4 exiting via interrupt
Philosopher 2 exiting via interrupt
Philosopher 0 exiting via interrupt
Philosopher 4 exiting via interrupt
*/

View File

@ -181,22 +181,22 @@ Turning on lights
Turning off lights
...________...________...________...________...
Terminating
Fri Jul 22 12:00:00 MDT 2016 temperature: 66.3 humidity:
Wed Jul 27 11:00:00 MDT 2016 temperature: 66.3 humidity:
50.20
Fri Jul 22 12:30:00 MDT 2016 temperature: 67.3 humidity:
Wed Jul 27 11:30:00 MDT 2016 temperature: 67.3 humidity:
51.02
Fri Jul 22 13:00:00 MDT 2016 temperature: 68.8 humidity:
Wed Jul 27 12:00:00 MDT 2016 temperature: 68.8 humidity:
51.82
Fri Jul 22 13:30:00 MDT 2016 temperature: 70.0 humidity:
Wed Jul 27 12:30:00 MDT 2016 temperature: 70.0 humidity:
52.19
Fri Jul 22 14:00:00 MDT 2016 temperature: 71.5 humidity:
Wed Jul 27 13:00:00 MDT 2016 temperature: 71.5 humidity:
52.99
Fri Jul 22 14:30:00 MDT 2016 temperature: 73.0 humidity:
Wed Jul 27 13:30:00 MDT 2016 temperature: 73.0 humidity:
53.32
Fri Jul 22 15:00:00 MDT 2016 temperature: 74.4 humidity:
Wed Jul 27 14:00:00 MDT 2016 temperature: 74.4 humidity:
53.99
Fri Jul 22 15:30:00 MDT 2016 temperature: 75.5 humidity:
Wed Jul 27 14:30:00 MDT 2016 temperature: 75.5 humidity:
54.40
Fri Jul 22 16:00:00 MDT 2016 temperature: 76.8 humidity:
Wed Jul 27 15:00:00 MDT 2016 temperature: 76.8 humidity:
53.96
*/

View File

@ -96,52 +96,50 @@ public class HorseRace {
2
*3
**4
**5
*6
*5
**6
===========================================================
================
**0
****1
*2
***1
**2
**3
***4
****5
*6
*5
****6
===========================================================
================
**0
...________...________...________...________...
***********************************************************
6
*******6
===========================================================
================
***********************************************************
************0
***********************************************************
*********1
***********************************************************
****2
***********************************************************
**************3
***********************************************************
**4
******************************************************5
***********************************************************
**6
===========================================================
================
***********************************************************
*************0
**********0
***********************************************************
**********1
***********************************************************
****2
***********2
***********************************************************
****************3
***************3
********************************************************4
*********************************************************5
***********************************************************
****4
********************************************************5
*******6
===========================================================
================
***********************************************************
****6
***********0
***********************************************************
**********1
***********************************************************
************2
***********************************************************
*****************3
*********************************************************4
**********************************************************5
***********************************************************
*******6
Horse 3 won!
*/

View File

@ -30,5 +30,5 @@ public class ParallelStreamPuzzle2 {
}
}
/* Output:
[29, 30, 31, 33, 35, 36, 37, 38, 39, 91]
[2, 3, 4, 5, 6, 7, 8, 9, 10, 63]
*/

View File

@ -18,15 +18,15 @@ public class ParallelStreamPuzzle3 {
}
}
/* Output:
8: main
6: ForkJoinPool.commonPool-worker-5
3: ForkJoinPool.commonPool-worker-7
2: ForkJoinPool.commonPool-worker-6
0: ForkJoinPool.commonPool-worker-4
4: ForkJoinPool.commonPool-worker-1
1: ForkJoinPool.commonPool-worker-3
8: main
7: ForkJoinPool.commonPool-worker-7
5: ForkJoinPool.commonPool-worker-5
1: ForkJoinPool.commonPool-worker-3
2: ForkJoinPool.commonPool-worker-6
4: ForkJoinPool.commonPool-worker-1
0: ForkJoinPool.commonPool-worker-4
7: main
9: ForkJoinPool.commonPool-worker-2
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
*/

View File

@ -133,11 +133,11 @@ public class PriorityBlockingQueueDemo {
[10 ] Task 20
[8 ] Task 8
[10 ] Task 21
[7 ] Task 19
[10 ] Task 22
[7 ] Task 11
[10 ] Task 23
[7 ] Task 4
[10 ] Task 22
[7 ] Task 19
[10 ] Task 23
[7 ] Task 11
[10 ] Task 24
[7 ] Task 1
...________...________...________...________...

View File

@ -65,5 +65,5 @@ public class SerialNumberChecker {
}
}
/* Output:
Duplicate: 5178
Duplicate: 4119
*/

View File

@ -27,24 +27,23 @@ public class SingleThreadExecutor {
/* Output:
All tasks submitted
main awaiting termination
main awaiting termination
SleepAndPrintTask[0] pool-1-thread-1
main awaiting termination
SleepAndPrintTask[1] pool-1-thread-1
main awaiting termination
main awaiting termination
SleepAndPrintTask[2] pool-1-thread-1
SleepAndPrintTask[3] pool-1-thread-1
main awaiting termination
SleepAndPrintTask[3] pool-1-thread-1
main awaiting termination
SleepAndPrintTask[4] pool-1-thread-1
main awaiting termination
SleepAndPrintTask[5] pool-1-thread-1
main awaiting termination
SleepAndPrintTask[6] pool-1-thread-1
main awaiting termination
main awaiting termination
SleepAndPrintTask[7] pool-1-thread-1
SleepAndPrintTask[8] pool-1-thread-1
main awaiting termination
SleepAndPrintTask[8] pool-1-thread-1
main awaiting termination
SleepAndPrintTask[9] pool-1-thread-1
*/

View File

@ -44,7 +44,7 @@ public class Summing {
}
/* Output:
5000000050000000
Sum Stream: 629ms
Sum Stream Parallel: 167ms
Sum Iterated: 2537ms
Sum Stream: 631ms
Sum Stream Parallel: 159ms
Sum Iterated: 2560ms
*/

View File

@ -36,8 +36,8 @@ public class Summing2 {
}
/* Output:
200000010000000
Array Stream Sum: 111ms
Parallel: 26ms
Array Stream Sum: 112ms
Parallel: 28ms
Basic Sum: 33ms
parallelPrefix: 50ms
parallelPrefix: 60ms
*/

View File

@ -35,7 +35,7 @@ public class Summing3 {
}
/* Output:
50000005000000
Long Array Stream Reduce: 1142ms
Long Array Stream Reduce: 1038ms
Long Basic Sum: 21ms
Long parallelPrefix: 3571ms
Long parallelPrefix: 3616ms
*/

View File

@ -16,5 +16,5 @@ public class Summing4 {
}
/* Output:
50000005000000
Long Parallel: 978ms
Long Parallel: 1014ms
*/

View File

@ -194,11 +194,11 @@ Toast 12: BUTTERED
Toast 12: JAMMED
Chomp! Toast 12: JAMMED
Eater interrupted
Butterer interrupted
Toaster interrupted
Toaster off
Jammer interrupted
Butterer off
Eater off
Jammer interrupted
Jammer off
Toaster interrupted
Butterer interrupted
Butterer off
Toaster off
*/

View File

@ -28,12 +28,12 @@ public class WorkStealingPool {
8
ForkJoinPool-1-worker-1
ForkJoinPool-1-worker-2
ForkJoinPool-1-worker-3
ForkJoinPool-1-worker-3
ForkJoinPool-1-worker-3
ForkJoinPool-1-worker-4
ForkJoinPool-1-worker-5
ForkJoinPool-1-worker-3
ForkJoinPool-1-worker-2
ForkJoinPool-1-worker-1
ForkJoinPool-1-worker-1
ForkJoinPool-1-worker-4
ForkJoinPool-1-worker-1
ForkJoinPool-1-worker-3
ForkJoinPool-1-worker-5
ForkJoinPool-1-worker-4
ForkJoinPool-1-worker-2
*/

View File

@ -218,14 +218,14 @@ Customer 0 eating LENTILS
WaitPerson 0 received SPRING_ROLLS delivering to Customer 3
Customer 3 eating SPRING_ROLLS
...________...________...________...________...
WaitPerson 0 off duty
WaitPerson 2 off duty
Customer 33 finished meal, leaving
Customer 18 finished meal, leaving
Customer 35 finished meal, leaving
Customer 46 finished meal, leaving
Customer 37 finished meal, leaving
Customer 31 finished meal, leaving
Customer 1 finished meal, leaving
Customer 3 finished meal, leaving
Customer 17 finished meal, leaving
Customer 12 finished meal, leaving
Customer 4 finished meal, leaving
Customer 7 finished meal, leaving
WaitPerson 4 off duty
Customer 24 finished meal, leaving
Customer 30 finished meal, leaving
Customer 34 finished meal, leaving
Customer 48 finished meal, leaving
*/

View File

@ -21,5 +21,5 @@ Rat Manx Cymric Mutt Pug Cymric Pug Manx Cymric Rat
EgyptianMau Hamster EgyptianMau Mutt Mutt Cymric Mouse Pug
Mouse Cymric
{EgyptianMau=2, Hamster=1, Pug=3, Manx=7, Cymric=5, Dog=6,
Mutt=3, Rat=2, Mouse=2, Rodent=5, Pet=20, Cat=9}
Pet=20, Mutt=3, Rat=2, Mouse=2, Rodent=5, Cat=9}
*/

View File

@ -1,74 +1,184 @@
# Requires Python 3.5 or greater
# (c)2016 MindView LLC: see Copyright.txt
# We make no guarantees that this code is fit for any purpose.
# Visit http://mindviewinc.com/Books/OnJava/ for more book information.
"""
ToDo:
- Validate errors
"""
#! py -3
# Requires Python 3.5
# Validates output from executable Java programs in "On Java 8."
# Use chain of responsibility to successively try strategies until one matches
from pathlib import Path
from output_duet import Duet, Valid
import textwrap
import re
import sys
import os
import collections
import pprint
import itertools
import textwrap
from collections import defaultdict
WIDTH = 59 # Max line width
def trace(*str): pass
# trace = print
#################### Phase 1: Basic formatting #####################
def clean():
for p in (Path(f) for f in [
"update_output.bat",
"edit_errors.bat",
"strategies.txt",
"validate_successes.txt",
"validate_failures.txt",
]):
if p.exists():
p.unlink()
def adjust_lines(text):
text = text.replace("\0", "NUL")
lines = text.splitlines()
slug = lines[0]
if "(First and Last " in slug:
num_of_lines = int(slug.split()[5])
adjusted = lines[:num_of_lines + 1] +\
["...________...________...________...________..."] +\
lines[-num_of_lines:]
return "\n".join(adjusted)
elif "(First " in slug:
num_of_lines = int(slug.split()[3])
adjusted = lines[:num_of_lines + 1] +\
[" ..."]
return "\n".join(adjusted)
else:
return text
def fill_to_width(text):
result = ""
for line in text.splitlines():
result += textwrap.fill(line, width = WIDTH) + "\n"
return result.strip()
def phase1():
"""
(0) Do first/last lines before formatting to width
(1) Combine output and error (if present) files
(2) Format all output to width limit
(3) Add closing '*/'
"""
for outfile in Path(".").rglob("*.out"):
out_text = adjust_lines(outfile.read_text())
phase_1 = outfile.with_suffix(".p1")
with phase_1.open('w') as phs1:
phs1.write(fill_to_width(out_text) + "\n")
errfile = outfile.with_suffix(".err")
if errfile.exists():
phs1.write("___[ Error Output ]___\n")
phs1.write(fill_to_width(errfile.read_text()) + "\n")
phs1.write("*/\n")
########### Chain of Responsibility Match Finder #######################
def exact_match(text): return text
memlocation = re.compile("@[0-9a-z]{5,7}")
def ignore_memory_addresses(text):
return memlocation.sub("", text)
datestamp1 = re.compile(
"(?:[MTWFS][a-z]{2} ){0,1}[JFMASOND][a-z]{2} \d{1,2} \d{2}:\d{2}:\d{2} [A-Z]{3} \d{4}")
datestamp2 = re.compile(
"[JFMASOND][a-z]{2} \d{1,2}, \d{4} \d{1,2}:\d{1,2}:\d{1,2} (:?AM|PM)")
def ignore_dates(text):
for pat in [ datestamp1, datestamp2 ]:
text = pat.sub("", text)
return text
def ignore_digits(input_text):
return re.sub("-?\d", "", input_text)
def sort_lines(input_text):
return "\n".join(sorted(input_text.splitlines())).strip()
def sort_words(input_text):
return "\n".join(sorted(input_text.split())).strip()
def unique_lines(input_text):
return "\n".join(sorted(list(set(input_text.splitlines()))))
# Fairly extreme but will still reveal significant changes
def unique_words(input_text):
return "\n".join(sorted(set(input_text.split())))
# Fairly extreme but will still reveal significant changes
word_only = re.compile("[A-Za-z]+")
def words_only(input_text):
return "\n".join(
sorted([w for w in input_text.split()
if word_only.fullmatch(w)]))
def no_match(input_text): return True
# Chain of responsibility:
strategies = [
# Filter Retain result for rest of chain
(exact_match, False),
(ignore_dates, True ),
(ignore_memory_addresses, True ),
(sort_lines, False),
(ignore_digits, False),
(sort_words, False),
(unique_lines, False),
(unique_words, False),
(words_only, False),
(no_match, False),
]
class Validator(defaultdict): # Map of lists
compare_output = Path(".") / "compare_output.bat"
def __init__(self):
super().__init__(list)
if Validator.compare_output.exists():
Validator.compare_output.unlink()
for strategy, retain in strategies:
strat_batch = Path(strategy.__name__ + ".bat")
if strat_batch.exists():
strat_batch.unlink()
def find_output_match(self, javafile, embedded_output, generated_output):
for strategy, retain in strategies:
filtered_embedded_output = strategy(embedded_output)
filtered_generated_output = strategy(generated_output)
if filtered_embedded_output == filtered_generated_output:
strat_name = strategy.__name__
self[strat_name].append(str(javafile))
if strat_name is "exact_match": return
tfile = javafile.with_suffix("." + strat_name)
with Path(strat_name + ".bat").open('a') as strat_batch:
strat_batch.write("subl " + str(tfile) + "\n")
with Validator.compare_output.open('a') as batch:
batch.write("subl " + str(tfile) + "\n")
with tfile.open('w') as trace_file:
trace_file.write(str(embedded_output) + "\n\n")
trace_file.write("=== Actual ===\n\n")
trace_file.write(str(generated_output))
return
if retain:
embedded_output = filtered_embedded_output
generated_output = filtered_generated_output
def display_results(self):
log = open("verified_output.txt", 'w')
for strategy, retain in strategies:
key = strategy.__name__
if key is "exact_match":
for java in self[key]:
print(java)
elif key in self:
log.write("\n" + (" " + key + " ").center(45, "=") + "\n")
for java in self[key]:
log.write(java + "\n")
log.close()
if __name__ == '__main__':
clean()
jfiles = sorted([java.name for java in Path(".").glob("**/*.java")])
duplicates = sorted([x for x, y in collections.Counter(jfiles).items() if y > 1])
if duplicates:
print("Duplicates:")
pprint.pprint(duplicates)
count = 0
for output in itertools.chain(Path(".").glob("**/*.out"), Path(".").glob("**/*.err")):
duet = Duet(output)
# if duet.error:
# os.system("subl {}".format(duet.java_path))
trace("duet.ignore:", duet.ignore, duet.java_path )
if duet.ignore:
continue
v = duet.validate()
if v is Valid.fail:
with Path("validate_failures.txt").open('a') as vf:
print(duet, file = vf)
with Path("strategies.txt").open('a') as st:
print(' "' + duet.java_path.name + '" : IgnoreSortedLines(),', file = st)
with Path("update_output.bat").open('a') as uo:
print('call no ' + str(duet.out_path.with_suffix(".new")), file = uo)
with Path("edit_errors.bat").open('a') as eo:
print('subl ' + str(duet.java_path), file = eo)
if duet.error:
duet.out_path.with_suffix(".new").write_text(duet.generated_un_adjusted)
os.system('subl ' + str(duet.out_path.with_suffix(".new")))
else:
with Path("validate_successes.txt").open('a') as vs:
print("{:<20}".format(v) + "{}".format(duet.java_path), file = vs)
count += 1
print("\n" + " Verified files = {} ".format(count).center(60, "*"))
if Path("validate_failures.txt").exists():
os.system("subl "
"update_output.bat "
"edit_errors.bat "
"strategies.txt "
"validate_successes.txt "
"validate_failures.txt")
else:
print("\n" + " No Output Errors ".center(60, "="))
phase1() # Generates '.p1' files
find_output = re.compile(r"/\* (Output:.*)\*/", re.DOTALL)
validator = Validator()
for outfile in Path(".").rglob("*.p1"):
javafile = outfile.with_suffix(".java")
if not javafile.exists():
print(str(outfile) + " has no javafile")
sys.exit(1)
javatext = javafile.read_text()
if "/* Output:" not in javatext:
print(str(outfile) + " has no /* Output:")
sys.exit(1)
validator.find_output_match(javafile,
find_output.search(javatext).group(0).strip(),
outfile.read_text().strip())
validator.display_results()
os.system("more verified_output.txt")