Changeset - dd9474bef2a6
[Not reviewed]
default
0 2 0
drewp@bigasterisk.com - 20 months ago 2023-05-29 22:16:57
drewp@bigasterisk.com
decimal not double! this caused patch comparisons to fail and led to redundant work
2 files changed with 25 insertions and 1 deletions:
0 comments (0 inline, 0 general)
light9/web/SyncedGraph.ts
Show inline comments
 
@@ -101,25 +101,25 @@ export class SyncedGraph {
 
      if (uri.value.startsWith(row.lo)) {
 
        return row.sh + ":" + uri.value.substring(row.lo.length);
 
      }
 
    }
 
    return uri.value;
 
  }
 

	
 
  Literal(jsValue: string | number) {
 
    return N3.DataFactory.literal(jsValue);
 
  }
 

	
 
  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) {
 
    return N3.DataFactory.quad(s, p, o, g);
 
  }
 

	
 
  toJs(literal: { value: any }) {
 
    // incomplete
 
    return parseFloat(literal.value);
 
  }
 

	
 
  loadTrig(trig: any, cb: () => any) {
light9/web/patch.test.ts
Show inline comments
 
import { assert, describe, expect, it } from "vitest";
 

	
 
import { Quad, NamedNode } from "n3";
 
import { Patch, QuadPattern } from "./patch";
 
import * as N3 from "n3";
 

	
 
const node1 = new NamedNode("http://example.com/node1");
 
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,
 
  object: N3.Quad_Object | null,
 
  graph: N3.Quad_Graph | null
 
): QuadPattern {
 
  return { subject, predicate, object, graph };
 
}
 

	
 
describe("Patch.matches", () => {
 
  it("matches any quads against an open pattern", () => {
 
    const quad1 = new Quad(node1, node2, node3);
 
@@ -34,22 +36,44 @@ describe("Patch.matches", () => {
 
    assert.isFalse(p.matches(QP(null, null, null, null)));
 
  });
 
  it("compares terms correctly", () => {
 
    assert.isTrue(new Patch([new Quad(node1, node2, node3)], []).matches(QP(node1, null, null, null)));
 
    assert.isFalse(new Patch([new Quad(node1, node2, node3)], []).matches(QP(node2, null, null, null)));
 
  });
 
  it("matches on just one set term", () => {
 
    assert.isTrue(new Patch([new Quad(node1, node2, node3)], []).matches(QP(node1, null, null, null)));
 
    assert.isTrue(new Patch([new Quad(node1, node2, node3)], []).matches(QP(null, node2, null, null)));
 
    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([], []);
 
    assert.isTrue(p.isEmpty());
 
  });
 
  it("works with unmatched quads", () => {
 
    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());
 
  });
 
});
0 comments (0 inline, 0 general)