static void test_dirty(void) { ClassAd *classad; ClassAdParser parser; classad = parser.ParseClassAd(dirty_classad_text); cout << "Testing dirty attributes...\n"; if (classad->IsAttributeDirty("A")) { cout << " Failed: A is dirty just after construction.\n"; } else { cout << " OK: A is clean.\n"; } classad->InsertAttr("B", true); if (classad->IsAttributeDirty("A")) { cout << " Failed: A is dirty after inserting B.\n"; } else { cout << " OK: A is still clean.\n"; } if (!classad->IsAttributeDirty("B")) { cout << " Failed: B is not dirty.\n"; } else { cout << " OK: B is dirty.\n"; } ClassAd::dirtyIterator it = classad->dirtyBegin(); if (it == classad->dirtyEnd()) { cout << " Failed: Dirty iterator gives us nothing.\n"; } else { if ((*it) != "B") { cout << " Failed: Dirty iterator is not pointing at B.\n"; } else { cout << " OK: Dirty iterator starts out okay.\n"; it++; if (it != classad->dirtyEnd()) { cout << " Failed: Dirty iterator it not at end.\n"; } else { cout << " OK: Dirty iterator ends okay.\n"; } } } classad->ClearAllDirtyFlags(); if (classad->IsAttributeDirty("B")) { cout << " Failed: B is dirty after clearing flags.\n"; } else { cout << " OK: B is clean.\n"; } classad->MarkAttributeDirty("A"); if (!classad->IsAttributeDirty("A")) { cout << " Failed: A is not dirty.\n"; } else { cout << " OK: A is dirty.\n"; } classad->MarkAttributeClean("A"); if (classad->IsAttributeDirty("A")) { cout << " Failed: A is dirty after cleaning it.\n"; } else { cout << " OK: A is clean.\n"; } return; }