Skip to content

Commit 6f01d93

Browse files
authored
✨ allow comparing v2 field confidence (#390)
1 parent b42bffd commit 6f01d93

File tree

2 files changed

+80
-4
lines changed

2 files changed

+80
-4
lines changed

src/parsing/v2/field/fieldConfidence.ts

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,67 @@ export enum FieldConfidence {
99
Medium = "Medium",
1010
Low = "Low",
1111
}
12+
13+
// eslint-disable-next-line @typescript-eslint/no-namespace
14+
export namespace FieldConfidence {
15+
/**
16+
* Converts a FieldConfidence value to an integer.
17+
* @param confidence The FieldConfidence value to convert
18+
* @returns Integer representation (Certain=4, High=3, Medium=2, Low=1)
19+
*/
20+
export function toInt(confidence: FieldConfidence | undefined): number {
21+
switch (confidence) {
22+
case FieldConfidence.Certain:
23+
return 4;
24+
case FieldConfidence.High:
25+
return 3;
26+
case FieldConfidence.Medium:
27+
return 2;
28+
case FieldConfidence.Low:
29+
return 1;
30+
default:
31+
throw new Error(`Unknown FieldConfidence value: ${confidence}`);
32+
}
33+
}
34+
35+
/**
36+
* Checks if the first FieldConfidence is greater than the second.
37+
* @param a First FieldConfidence value
38+
* @param b Second FieldConfidence value
39+
* @returns true if a > b
40+
*/
41+
export function greaterThan(a: FieldConfidence | undefined, b: FieldConfidence | undefined): boolean {
42+
return toInt(a) > toInt(b);
43+
}
44+
45+
/**
46+
* Checks if the first FieldConfidence is greater than or equal to the second.
47+
* @param a First FieldConfidence value
48+
* @param b Second FieldConfidence value
49+
* @returns true if a >= b
50+
*/
51+
export function greaterThanOrEqual(a: FieldConfidence | undefined, b: FieldConfidence | undefined): boolean {
52+
return toInt(a) >= toInt(b);
53+
}
54+
55+
/**
56+
* Checks if the first FieldConfidence is less than the second.
57+
* @param a First FieldConfidence value
58+
* @param b Second FieldConfidence value
59+
* @returns true if a < b
60+
*/
61+
export function lessThan(a: FieldConfidence | undefined, b: FieldConfidence | undefined): boolean {
62+
return toInt(a) < toInt(b);
63+
}
64+
65+
/**
66+
* Checks if the first FieldConfidence is less than or equal to the second.
67+
* @param a First FieldConfidence value
68+
* @param b Second FieldConfidence value
69+
* @returns true if a <= b
70+
*/
71+
export function lessThanOrEqual(a: FieldConfidence | undefined, b: FieldConfidence | undefined): boolean {
72+
return toInt(a) <= toInt(b);
73+
}
74+
75+
}

tests/parsing/v2/inference.spec.ts

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,22 +162,26 @@ describe("inference", async () => {
162162
const simpleFieldStr = fields.getSimpleField("field_simple_string");
163163
expect(simpleFieldStr.value).to.be.eq("field_simple_string-value");
164164
expect(simpleFieldStr.stringValue).to.be.eq("field_simple_string-value");
165+
expect(simpleFieldStr.confidence).to.be.eq(FieldConfidence.Certain);
165166
expect(() => simpleFieldStr.numberValue).to.throw("Value is not a number");
166167
expect(() => simpleFieldStr.booleanValue).to.throw("Value is not a boolean");
167168

168169
expect(fields.get("field_simple_float")).to.be.instanceOf(SimpleField);
169170
const simpleFieldFloat = fields.getSimpleField("field_simple_float");
170171
expect(simpleFieldFloat.value).to.be.eq(1.1);
171172
expect(simpleFieldFloat.numberValue).to.be.eq(1.1);
173+
expect(simpleFieldFloat.confidence).to.be.eq(FieldConfidence.High);
172174
expect(() => simpleFieldFloat.stringValue).to.throw("Value is not a string");
173175
expect(() => simpleFieldFloat.booleanValue).to.throw("Value is not a boolean");
174176

175177
expect(fields.get("field_simple_int")).to.be.instanceOf(SimpleField);
176178
const simpleFieldInt = fields.getSimpleField("field_simple_int");
179+
expect(simpleFieldInt.confidence).to.be.eq(FieldConfidence.Medium);
177180
expect(simpleFieldInt.value).to.be.eq(12.0);
178181

179182
expect(fields.get("field_simple_zero")).to.be.instanceOf(SimpleField);
180183
const simpleFieldZero = fields.getSimpleField("field_simple_zero");
184+
expect(simpleFieldZero.confidence).to.be.eq(FieldConfidence.Low);
181185
expect(simpleFieldZero.value).to.be.eq(0);
182186
expect(simpleFieldZero.numberValue).to.be.eq(0);
183187

@@ -223,6 +227,7 @@ describe("inference", async () => {
223227

224228
const subField1 = subFields.get("subfield_1");
225229
expect(subField1?.value).to.be.not.null;
230+
expect(subField1?.confidence).to.be.eq(FieldConfidence.High);
226231

227232
subFields.forEach((subField, fieldName) => {
228233
expect(fieldName.startsWith("subfield_")).to.be.true;
@@ -308,11 +313,18 @@ describe("inference", async () => {
308313
expect(polygon[3][0]).to.equal(0.948849);
309314
expect(polygon[3][1]).to.equal(0.244565);
310315

311-
const isCertainEnum = dateField.confidence === FieldConfidence.Medium;
312-
expect(isCertainEnum).to.be.true;
316+
const eqConfidenceEnum = dateField.confidence === FieldConfidence.Medium;
317+
expect(eqConfidenceEnum).to.be.true;
313318

314-
const isCertainStr = dateField.confidence === "Medium";
315-
expect(isCertainStr).to.be.true;
319+
expect(dateField.confidence === "Medium").to.be.true;
320+
expect(FieldConfidence.toInt(dateField.confidence) === 2).to.be.true;
321+
322+
expect(FieldConfidence.greaterThan(dateField.confidence, FieldConfidence.Low)).to.be.true;
323+
expect(FieldConfidence.greaterThanOrEqual(dateField.confidence, FieldConfidence.Low)).to.be.true;
324+
expect(FieldConfidence.greaterThanOrEqual(dateField.confidence, FieldConfidence.Medium)).to.be.true;
325+
expect(FieldConfidence.lessThanOrEqual(dateField.confidence, FieldConfidence.Medium)).to.be.true;
326+
expect(FieldConfidence.lessThanOrEqual(dateField.confidence, FieldConfidence.Certain)).to.be.true;
327+
expect(FieldConfidence.lessThan(dateField.confidence, FieldConfidence.Certain)).to.be.true;
316328

317329
}).timeout(10000);
318330
});

0 commit comments

Comments
 (0)