Skip to content

Commit 02490c6

Browse files
committed
Shift
1 parent faabb06 commit 02490c6

File tree

3 files changed

+80
-1
lines changed

3 files changed

+80
-1
lines changed

src/ListItem.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,23 @@ export class ListItem<T> extends TermWrapper {
7878
yield more
7979
}
8080
}
81+
82+
shift(): T | undefined {
83+
const rest = this.rest
84+
if (!rest.isListItem) {
85+
throw new Error("?")
86+
}
87+
88+
const shifted = this.first
89+
const nextFirst = rest.firstRaw
90+
const nextRest = rest.restRaw
91+
92+
rest.firstRaw = undefined
93+
rest.restRaw = undefined
94+
95+
this.firstRaw = nextFirst
96+
this.restRaw = nextRest
97+
98+
return shifted
99+
}
81100
}

src/RdfList.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,11 @@ export class RdfList<T> implements Array<T> {
129129
}
130130

131131
shift(): T | undefined {
132-
throw new Error("not implemented")
132+
for (const item of this.items) {
133+
return item.shift()
134+
}
135+
136+
return undefined
133137
}
134138

135139
slice(start?: number, end?: number): T[] {

test/unit/rdf_list.test.ts

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,4 +146,60 @@ describe("RDF List", () => {
146146
assert.deepStrictEqual([...wrapper.list], ["o1", "o2", "o3"])
147147
})
148148
})
149+
150+
describe("shift", () => {
151+
it("not list undefined", () => {
152+
const rdf = `<s> <p> <o> .`
153+
const wrapper = new Wrapper("s", datasetFromRdf(rdf), DataFactory)
154+
155+
const shifted = wrapper.list.shift()
156+
157+
assert.strictEqual(shifted, undefined)
158+
})
159+
160+
it("empty undefined", () => {
161+
const rdf = `<s> <p> () .`
162+
const wrapper = new Wrapper("s", datasetFromRdf(rdf), DataFactory)
163+
164+
const shifted = wrapper.list.shift()
165+
166+
assert.strictEqual(shifted, undefined)
167+
})
168+
169+
it("one returns first", {skip: "not implemented yet"}, () => {
170+
const rdf = `<s> <p> ( "o1" ) .`
171+
const wrapper = new Wrapper("s", datasetFromRdf(rdf), DataFactory)
172+
173+
const shifted = wrapper.list.shift()
174+
175+
assert.strictEqual(shifted, "o1")
176+
})
177+
178+
it("one shrinks", {skip: "not implemented yet"}, () => {
179+
const rdf = `<s> <p> ( "o1" ) .`
180+
const wrapper = new Wrapper("s", datasetFromRdf(rdf), DataFactory)
181+
182+
wrapper.list.shift()
183+
184+
assert.deepStrictEqual([...wrapper.list], [])
185+
})
186+
187+
it("two returns first", () => {
188+
const rdf = `<s> <p> ( "o1" "o2" ) .`
189+
const wrapper = new Wrapper("s", datasetFromRdf(rdf), DataFactory)
190+
191+
const shifted = wrapper.list.shift()
192+
193+
assert.strictEqual(shifted, "o1")
194+
})
195+
196+
it("two shrinks", () => {
197+
const rdf = `<s> <p> ( "o1" "o2" ) .`
198+
const wrapper = new Wrapper("s", datasetFromRdf(rdf), DataFactory)
199+
200+
wrapper.list.shift()
201+
202+
assert.deepStrictEqual([...wrapper.list], ["o2"])
203+
})
204+
})
149205
})

0 commit comments

Comments
 (0)