Skip to content

CFDictionary: cover creation, query and add/replace semantics#72

Open
DTW-Thalion wants to merge 1 commit into
gnustep:masterfrom
DTW-Thalion:test/cfdictionary-coverage
Open

CFDictionary: cover creation, query and add/replace semantics#72
DTW-Thalion wants to merge 1 commit into
gnustep:masterfrom
DTW-Thalion:test/cfdictionary-coverage

Conversation

@DTW-Thalion

Copy link
Copy Markdown
Contributor

The existing CFDictionary tests drive the mutable set/get/remove path (and a large stress test) but leave the immutable and query API untested. This adds two files to Tests/CFDictionary.

create.m — immutable and read-only API:

  • CFDictionaryCreate, CFDictionaryCreateCopy.
  • Query — CFDictionaryContainsKey, CFDictionaryContainsValue, CFDictionaryGetCountOfKey, CFDictionaryGetCountOfValue (including a value shared by two keys), CFDictionaryGetKeysAndValues, CFDictionaryGetValueIfPresent.
  • CFDictionaryApplyFunction (verifies every entry is visited).
  • CFDictionaryGetTypeID / CFGetTypeID, and CFEqual / CFHash.

mutation.m — the add/set/replace distinction:

  • CFDictionaryAddValue leaves a key that is already present untouched, whereas CFDictionarySetValue overwrites and CFDictionaryReplaceValue acts only on a present key.
  • CFDictionaryCreateMutableCopy, CFDictionaryRemoveValue, CFDictionaryRemoveAllValues.

Raises CFDictionary.c line coverage from 71.7% to 80.3% (measured with llvm-cov). All new tests pass and no existing tests are affected. The remaining uncovered lines are the toll-free-bridge (CF_IS_OBJC) branches, which pure-CF tests do not reach.

The existing tests drive the mutable set/get/remove path but leave the
immutable and query API untested.  Add a suite that exercises
CFDictionaryCreate, CFDictionaryCreateCopy and CFDictionaryCreateMutableCopy,
the query functions (CFDictionaryContainsKey/Value, GetCountOfKey/Value,
GetKeysAndValues, GetValueIfPresent), CFDictionaryApplyFunction, the type
ID, and CFEqual / CFHash.  A second file covers the add/set/replace
distinction: CFDictionaryAddValue leaves a present key untouched, while
CFDictionarySetValue overwrites and CFDictionaryReplaceValue only acts on
a present key.  Raises CFDictionary.c line coverage from 71.7% to 80.3%
(the remainder is the toll-free-bridge paths).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant