diff --git a/light9/web/SyncedGraph.ts b/light9/web/SyncedGraph.ts --- a/light9/web/SyncedGraph.ts +++ b/light9/web/SyncedGraph.ts @@ -110,7 +110,7 @@ export class SyncedGraph { } LiteralRoundedFloat(f: number) { - return N3.DataFactory.literal(f.toPrecision(3), this.Uri("http://www.w3.org/2001/XMLSchema#double")); + return N3.DataFactory.literal(f.toPrecision(3), this.Uri("http://www.w3.org/2001/XMLSchema#decimal")); } Quad(s: any, p: any, o: any, g: any) { diff --git a/light9/web/patch.test.ts b/light9/web/patch.test.ts --- a/light9/web/patch.test.ts +++ b/light9/web/patch.test.ts @@ -8,6 +8,8 @@ const node1 = new NamedNode("http://exam const node2 = new NamedNode("http://example.com/node2"); const node3 = new NamedNode("http://example.com/node3"); +const decimalDT = new NamedNode("http://www.w3.org/2001/XMLSchema#decimal"); + function QP( subject: N3.Quad_Subject | null, // predicate: N3.Quad_Predicate | null, @@ -43,6 +45,7 @@ describe("Patch.matches", () => { assert.isTrue(new Patch([new Quad(node1, node2, node3)], []).matches(QP(null, null, node3, null))); }); }); + describe("Patch.empty", () => { it("works with no quads", () => { const p = new Patch([], []); @@ -52,4 +55,25 @@ describe("Patch.empty", () => { const p = new Patch([], [new Quad(node1, node2, node3)]); assert.isFalse(p.isEmpty()); }); + it("understands floats are equal", () => { + const p = new Patch( + [new Quad(node1, node2, N3.DataFactory.literal((0.12345).toPrecision(3), decimalDT))], + [new Quad(node1, node2, N3.DataFactory.literal((0.1234).toPrecision(3), decimalDT))] + ); + assert.isTrue(p.isEmpty()); + }); + it("...and when they're not", () => { + const p = new Patch( + [new Quad(node1, node2, N3.DataFactory.literal(0.123, decimalDT))], // + [new Quad(node1, node2, N3.DataFactory.literal(0.124, decimalDT))] + ); + assert.isFalse(p.isEmpty()); + }); + it("understands literals are equal", () => { + const p = new Patch( + [new Quad(node1, node2, node3)], // + [new Quad(node1, node2, new NamedNode("http://example.com/node" + "3"))] + ); + assert.isTrue(p.isEmpty()); + }); });