1 package org.matsim.utils.eventsfilecomparison;
3 import it.unimi.dsi.fastutil.floats.FloatListIterator;
4 import it.unimi.dsi.fastutil.objects.Object2IntMap;
23 private static final float EPS = 1e-8f;
44 this.compareFingerprint = null;
49 this.comparisonResult = null;
68 void setComparisonMessage(String comparisonMessage) {
78 if (compareFingerprint != null) {
79 if (iterator == null) {
80 this.iterator = compareFingerprint.timeArray.iterator();
83 if (this.comparisonResult == null) {
84 if (iterator.hasNext()) {
85 float entry = iterator.nextFloat();
87 if (Math.abs((
float) event.
getTime() - entry) >= EPS) {
89 this.comparisonMessage =
"Difference occurred in this event time=" +
event.getTime() + lexicographicSortedString;
93 this.comparisonMessage =
"Additional event time=" +
event.getTime() + lexicographicSortedString;
102 if (eventFingerprint.timeArray.isEmpty()) {
103 hashAccumulationList.add(lexicographicSortedString);
105 float lastTime = eventFingerprint.timeArray.getFloat(eventFingerprint.timeArray.size() - 1);
107 if (lastTime == event.
getTime()) {
108 hashAccumulationList.add(lexicographicSortedString);
113 hashAccumulationList.add(lexicographicSortedString);
117 eventFingerprint.addTimeStamp(event.
getTime());
124 Collections.sort(hashAccumulationList);
126 for (String str : hashAccumulationList) {
127 eventFingerprint.addHashCode(str);
130 hashAccumulationList.clear();
138 void finishProcessing() {
140 if (!hashAccumulationList.isEmpty()) {
144 byte[] hash = eventFingerprint.computeHash();
148 if (compareFingerprint == null)
152 for (Object2IntMap.Entry<String> entry1 : compareFingerprint.eventTypeCounter.object2IntEntrySet()) {
153 String key = entry1.getKey();
154 int count1 = entry1.getIntValue();
155 int count2 = eventFingerprint.eventTypeCounter.getInt(key);
156 if (count1 != count2) {
161 if (!comparisonMessage.isEmpty())
162 comparisonMessage +=
"\n";
164 comparisonMessage +=
"Count for event type '%s' differs: %d (in fingerprint) != %d (in events)".formatted(key, count1, count2);
169 if (comparisonResult != null) {
174 if (!Arrays.equals(hash, compareFingerprint.hash)) {
176 comparisonMessage =
"Difference occurred in this hash of 2 files";
184 List<String> strings =
new ArrayList<String>();
185 for (Map.Entry<String, String> e : event.
getAttributes().entrySet()) {
186 StringBuilder tmp =
new StringBuilder();
187 final String key = e.getKey();
199 tmp.append(e.getValue());
200 strings.add(tmp.toString());
202 Collections.sort(strings);
203 StringBuilder eventStr =
new StringBuilder();
204 for (String str : strings) {
205 eventStr.append(
" | ");
206 eventStr.append(str);
209 eventStr.append(
" | ");
210 return eventStr.toString();
String toLexicographicSortedString(Event event)
FloatListIterator iterator
final List< String > hashAccumulationList
final EventFingerprint compareFingerprint
static final String ATTRIBUTE_TIME
ComparisonResult comparisonResult
static final String ATTRIBUTE_X
abstract String getEventType()
Map< String, String > getAttributes()
void handleEvent(Event event)
String getComparisonMessage()
final EventFingerprint eventFingerprint
FingerprintEventHandler(EventFingerprint compareFingerprint)
DIFFERENT_EVENT_ATTRIBUTES
ComparisonResult getComparisonResult()
FingerprintEventHandler()
static final String ATTRIBUTE_Y
EventFingerprint getEventFingerprint()