20 package org.matsim.utils.eventsfilecomparison;
22 import org.apache.logging.log4j.LogManager;
23 import org.apache.logging.log4j.Logger;
27 import java.util.Map.Entry;
28 import java.util.concurrent.CyclicBarrier;
46 public static void main(String[] args) {
47 if (args.length != 2) {
48 System.out.println(
"Error: expected 2 events files as input arguments but found " + args.length);
49 System.out.println(
"Syntax: EventsFileComparator eventsFile1 eventsFile2");
51 String filename1 = args[0];
52 String filename2 = args[1];
73 CyclicBarrier doComparison =
new CyclicBarrier(2, comparator);
74 Worker w1 =
new Worker(filename1, doComparison, ignoringCoordinates );
75 Worker w2 =
new Worker(filename2, doComparison, ignoringCoordinates );
76 comparator.setWorkers(w1, w2);
82 }
catch (InterruptedException e) {
87 }
catch (InterruptedException e) {
93 log.info(
"Event files are semantically equivalent.");
95 log.warn(
"Event files differ.");
106 void setWorkers(
final Worker w1,
final Worker w2) {
113 if (this.worker1.getCurrentTime() != this.worker2.getCurrentTime()) {
114 log.warn(
"Differnt time steps in event files!");
119 if (this.worker1.isFinished() != this.worker2.isFinished()) {
120 log.warn(
"Events files have different number of time steps!");
125 Map<String, Counter> map1 = this.worker1.getEventsMap();
126 Map<String, Counter> map2 = this.worker2.getEventsMap();
128 boolean problem = false ;
133 for (Entry<String, Counter> entry : map1.entrySet()) {
135 Counter counter = map2.get(entry.getKey());
136 if (counter == null) {
137 if (logCounter < 50) {
139 log.warn(
"The event:");
140 log.warn(entry.getKey());
141 log.warn(
"is missing in events file:" + worker2.getEventsFile());
144 if (logCounter == 50) {
149 if( counter.getCount() != entry.getValue().getCount() ){
151 "Wrong event count for: " + entry.getKey() +
"\n" + entry.getValue().getCount() +
" times in file:" + worker1.getEventsFile()
152 +
"\n" + counter.getCount() +
" times in file:" + worker2.getEventsFile() );
161 for (Entry<String, Counter> e : map2.entrySet()) {
162 Counter counter = map1.get(e.getKey());
163 if (counter == null) {
164 if (logCounter < 50) {
166 log.warn(
"The event:");
167 log.warn(e.getKey());
168 log.warn(
"is missing in events file:" + worker1.getEventsFile());
171 if (logCounter == 50) {
182 if (this.worker1.isFinished()) {
188 this.retCode= errCode;
190 this.worker1.interrupt();
191 this.worker2.interrupt();
boolean ignoringCoordinates
static final String FUTURE_SUPPRESSED
void setExitCode(final ComparisonResult errCode)
DIFFERENT_NUMBER_OF_TIMESTEPS
volatile ComparisonResult retCode
static ComparisonResult compare(final String filename1, final String filename2)
EventsFileComparator setIgnoringCoordinates(boolean ignoringCoordinates)
ComparisonResult runComparison(final String filename1, final String filename2)
static void main(String[] args)