// the Atom tests private static ValidationReport ValidateCharge(IAtom atom) { var report = new ValidationReport(); var tooCharged = new ValidationTest(atom, "Atom has an unlikely large positive or negative charge"); switch (atom.AtomicNumber) { case AtomicNumbers.O: case AtomicNumbers.N: case AtomicNumbers.C: case AtomicNumbers.H: if (atom.FormalCharge == 0) { report.OKs.Add(tooCharged); } else { tooCharged.Details = $"Atom {atom.Symbol} has charge {atom.FormalCharge}"; if (atom.FormalCharge < -3) { report.Errors.Add(tooCharged); } else if (atom.FormalCharge < -1) { report.Warnings.Add(tooCharged); } else if (atom.FormalCharge > 3) { report.Errors.Add(tooCharged); } else if (atom.FormalCharge > 1) { report.Warnings.Add(tooCharged); } } break; default: if (atom.FormalCharge == 0) { report.OKs.Add(tooCharged); } else { tooCharged.Details = $"Atom {atom.Symbol} has charge {atom.FormalCharge}"; if (atom.FormalCharge < -4) { report.Errors.Add(tooCharged); } else if (atom.FormalCharge < -3) { report.Warnings.Add(tooCharged); } else if (atom.FormalCharge > 4) { report.Errors.Add(tooCharged); } else if (atom.FormalCharge > 3) { report.Warnings.Add(tooCharged); } } break; } return(report); }
public override ValidationReport ValidateChemObject(IChemObject subject) { var report = new ValidationReport(); var properties = subject.GetProperties(); var iter = properties.Keys; var noNamespace = new ValidationTest(subject,"Dictionary Reference lacks a namespace indicating the dictionary."); var noDict = new ValidationTest(subject, "The referenced dictionary does not exist."); var noEntry = new ValidationTest(subject, "The referenced entry does not exist in the dictionary."); foreach (var key in iter) { if (key is string keyName) { if (keyName.StartsWith(DictionaryDatabase.DictRefPropertyName, StringComparison.Ordinal)) { string dictRef = (string)properties[keyName]; string details = "Dictref being anaylyzed: " + dictRef + ". "; noNamespace.Details = details; noDict.Details = details; noEntry.Details = details; int index = dictRef.IndexOf(':'); if (index != -1) { report.OKs.Add(noNamespace); string dict = dictRef.Substring(0, index); Debug.WriteLine($"Looking for dictionary:{dict}"); if (db.HasDictionary(dict)) { report.OKs.Add(noDict); if (dictRef.Length > index + 1) { string entry = dictRef.Substring(index + 1); Debug.WriteLine($"Looking for entry:{entry}"); if (db.HasEntry(dict, entry)) { report.OKs.Add(noEntry); } else { report.Errors.Add(noEntry); } } else { report.Errors.Add(noEntry); } } else { details += "The dictionary searched: " + dict + "."; noDict.Details = details; report.Errors.Add(noDict); report.Errors.Add(noEntry); } } else { // The dictRef has no namespace details += "There is not a namespace given."; noNamespace.Details = details; report.Errors.Add(noNamespace); report.Errors.Add(noDict); report.Errors.Add(noEntry); } } else { // not a dictref } } else { // not a dictref } } return report; }