Skip to content

Commit

Permalink
Fix adding duplicate enum codes
Browse files Browse the repository at this point in the history
  • Loading branch information
garethj2 committed Mar 15, 2024
1 parent 0143550 commit 6d826cd
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 12 deletions.
30 changes: 30 additions & 0 deletions spec/core/EnumTag.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,36 @@ describe('EnumTag', () => {
})
})

it('decode values from a dict with differing codes', () => {
const grid = HGrid.make([
new HDict({
name: 'a',
code: -1,
}),
new HDict({
name: 'x',
code: -1,
}),
new HDict({
name: 'b',
code: 9,
}),
new HDict({
name: 'b',
code: 10,
}),
])

const enumTag = new EnumTag(grid)

expect(enumTag.nameToCode('a')).toBe(-1)
expect(enumTag.nameToCode('x')).toBe(-1)
expect(enumTag.nameToCode('b')).toBe(10)

expect(enumTag.codeToName(9)).toBe('b')
expect(enumTag.codeToName(10)).toBe('b')
})

it('creates an enum tag from a grid with no codes', () => {
const grid = new HGrid([
new HDict({
Expand Down
19 changes: 7 additions & 12 deletions src/core/EnumTag.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,19 +65,14 @@ export class EnumTag {
let falseName: string | undefined

const addEnumEntry = (name: string, code: number): void => {
if (
!this.#nameToCodeMap.has(name) &&
!this.#codeToNameMap.has(code)
) {
if (!trueName && code) {
trueName = name
}
if (!falseName && !code) {
falseName = name
}
this.#nameToCodeMap.set(name, code)
this.#codeToNameMap.set(code, name)
if (!trueName && code) {
trueName = name
}
if (!falseName && !code) {
falseName = name
}
this.#nameToCodeMap.set(name, code)
this.#codeToNameMap.set(code, name)
}

if (typeof data === 'string' || valueIsKind<HStr>(data, Kind.Str)) {
Expand Down

0 comments on commit 6d826cd

Please sign in to comment.