|
Implementations | ||||||||||||||||
Tests | BaseX 7.7 XQ30 |
EMC/xDB xDB_main_r2411365 XQ30 |
Saxon-EE 9.5.1.1 XP20 |
Saxon-EE 9.5.1.1 XQ10 |
Saxon-EE 9.5.1.1 XP30 |
Saxon-EE 9.5.1.1 XQ30 |
Saxon-EE 9.5.1.4 XQX30 (QT3 v1.1) |
XmlPrime 3.0.0.0 XP30 (QT3 vCVS) |
XmlPrime 3.0.0.0 XQ30 (QT3 vCVS) |
XmlPrime 3.0.0.0 XQX30 (QT3 vCVS) |
XmlPrime 3.0.0.0 XP20 (QT3 vCVS) |
XmlPrime 3.0.0.0 XQX10 (QT3 vCVS) |
XmlPrime 3.0.0.0 XQ10 (QT3 vCVS) |
Zorba 2.9 XQ10 (QT3 vCVS) |
Zorba 2.9 XQ30 (QT3 vCVS) |
|
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
fn-last | 65/65 | 64/65 | 53/53 | 65/65 | 53/53 | 65/65 | 65/65 | 53/53 | 65/65 | 65/65 | 53/53 | 65/65 | 65/65 | 65/65 | 65/65 | 3/15 |
last-1[+]
X last-1: for $h in (/works) return $h//employee[last()]/string(@name) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
last-2[+]
X last-2: last() |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
last-3[+]
X last-3: for $h in (/works/employee[12]) return $h/overtime[last() = 1]/*/string() |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
last-4[+]
X last-4: for $h in (/works) return $h/employee[position() = last()]/string(@name) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
last-5[+]
X last-5: for $h in (/works) return $h/employee[last() = position()]/string(@name) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
last-6[+]
X last-6: for $h in (/works) return $h/employee[last()] << $h/employee[last()] |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
last-7[+]
X last-7: for $h in (/works) return $h/employee[last()] is $h/employee[last()] |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
last-8[+]
X last-8: for $h in (/works/employee[12]) return $h/overtime[last() = last()]/*/string() |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
last-9[+]
X last-9: for $h in (/works) return $h//employee[@name="Jane Doe 13"][last() = 1]/string(@name) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
last-10[+]
X last-10: for $h in (/works) return $h//employee[last() = 13][@name = "Jane Doe 13"]/string(@name) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
last-11[+]
X last-11: for $h in (/works/employee[12]/overtime) return $h/day[not(position() = 1)] |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
last-12[+]
X last-12: for $h in (/works/employee[12]/overtime) return $h/*[position() = position()]/string() |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
last-13[+]
X last-13: for $h in (/works) return $h/employee[position() = (2 + 2)]/string(@name) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
last-14[+]
X last-14: for $h in (/works) return $h/employee[position() = (5 - 2)]/string(@name) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
last-15[+]
X last-15: for $h in (/works) return $h/employee[position() = (3 * 2)]/string(@name) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
last-16[+]
X last-16: for $h in (/works) return $h/employee[position() = (6 div 2)]/string(@name) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
last-17[+]
X last-17: for $h in (/works) return $h/employee[position() = (6 idiv 2)]/string(@name) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
last-18[+]
X last-18: for $h in (/works/employee[12]) return ($h/overtime[position() and fn:true()]/*/string()) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
last-19[+]
X last-19: for $h in (/works/employee[12]) return $h/overtime[position() and fn:false()] |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
last-20[+]
X last-20: for $h in (/works/employee[12]) return $h/overtime[position() or fn:true()]/*/string() |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
last-21[+]
X last-21: for $h in (/works/employee[12]) return $h/overtime[position() or fn:false()]/*/string() |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
last-22[+]
X last-22: for $h in (/works) return $h/employee[position() = 12]/overtime/*/string() |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
last-23[+]
X last-23: for $h in (/works) return $h/employee[position() = 5 to last()]/@name/string() |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
last-24[+]
X last-24: last() |
pass | fail | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-1[+]
X K-ContextLastFunc-1: last(1) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-2[+]
X K-ContextLastFunc-2: (1, 2, 3)[if(1) then 1 else last()] |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-3[+]
X K-ContextLastFunc-3: deep-equal((1, 2, 3)[count((last(), last())) eq 2], (1, 2, 3)) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-4[+]
X K-ContextLastFunc-4: deep-equal((1, 2, 3)[last() eq last()], (1, 2, 3)) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-5[+]
X K-ContextLastFunc-5: (1, 2, 3, current-time())[last() - 1] treat as xs:integer eq 3 |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-6[+]
X K-ContextLastFunc-6: empty((1, 2, 3, current-time())[last() + 1]) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-7[+]
X K-ContextLastFunc-7: empty((1, 2, 3, current-time(), current-date(), 6, 7, 8) [last() = 0]) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-8[+]
X K-ContextLastFunc-8: empty((1, 2, 3, current-time(), current-date(), 6, 7, 8) [0 = last()]) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-9[+]
X K-ContextLastFunc-9: empty((1, 2, 3, current-time(), current-date(), 6, 7, 8) [last() eq 0]) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-10[+]
X K-ContextLastFunc-10: empty((1, 2, 3, current-time(), current-date(), 6, 7, 8) [0 eq last()]) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-11[+]
X K-ContextLastFunc-11: deep-equal( (1, 2, 3, remove((current-time(), 4), 1)) [last() != 0], (1, 2, 3, 4)) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-12[+]
X K-ContextLastFunc-12: deep-equal( (1, 2, 3, remove((current-time(), 4), 1)) [last() ne 0], (1, 2, 3, 4)) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-13[+]
X K-ContextLastFunc-13: deep-equal( (1, 2, 3, remove((current-time(), 4), 1)) [0 != last()], (1, 2, 3, 4)) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-14[+]
X K-ContextLastFunc-14: deep-equal( (1, 2, 3, remove((current-time(), 4), 1)) [0 ne last()], (1, 2, 3, 4)) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-15[+]
X K-ContextLastFunc-15: empty((1, 2, 3, current-time(), current-date(), 6, 7, 8) [last() lt 1]) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-16[+]
X K-ContextLastFunc-16: empty((1, 2, 3, current-time(), current-date(), 6, 7, 8) [last() < 1]) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-17[+]
X K-ContextLastFunc-17: empty((1, 2, 3, current-time(), current-date(), 6, 7, 8) [last() le 0]) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-18[+]
X K-ContextLastFunc-18: empty((1, 2, 3, current-time(), current-date(), 6, 7, 8) [last() <= 0]) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-19[+]
X K-ContextLastFunc-19: deep-equal( (1, 2, 3, remove((current-time(), 4), 1)) [last() > 0], (1, 2, 3, 4)) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-20[+]
X K-ContextLastFunc-20: deep-equal( (1, 2, 3, remove((current-time(), 4), 1)) [last() > 0], (1, 2, 3, 4)) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-21[+]
X K-ContextLastFunc-21: deep-equal( (1, 2, 3, remove((current-time(), 4), 1)) [last() gt 0], (1, 2, 3, 4)) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-22[+]
X K-ContextLastFunc-22: deep-equal( (1, 2, 3, remove((current-time(), 4), 1)) [last() >= 1], (1, 2, 3, 4)) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-23[+]
X K-ContextLastFunc-23: deep-equal( (1, 2, 3, remove((current-time(), 4), 1)) [last() ge 1], (1, 2, 3, 4)) |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-24[+]
X K-ContextLastFunc-24: (1, 2, 3, 4, current-time(), 4, 5, 6)[last() - 2] treat as xs:integer eq 4 |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-25[+]
X K-ContextLastFunc-25: (1, 2, 3, 4, current-time(), 4, 5, 6)[last() - 1] treat as xs:integer eq 5 |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-26[+]
X K-ContextLastFunc-26: (1, 2, 3, 4, current-time(), 4, 5, 6)[last()] treat as xs:integer eq 6 |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-27[+]
X K-ContextLastFunc-27: (1, 2, 3, 4, current-time(), 4, 5, 6)[last() - 0] treat as xs:integer eq 6 |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-28[+]
X K-ContextLastFunc-28: (1 to 6)[last()] eq 6 |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
K-ContextLastFunc-29[+]
X K-ContextLastFunc-29: (-20 to -5)[last() - 3] |
pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | pass | |
cbcl-last-in-sequence-001[+]
X cbcl-last-in-sequence-001: declare function local:generate($arg as xs:integer?) { if ($arg = 0) then (1, 2, 3) else () }; ( local:generate(0), 1, local:generate(0) )[last()] |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
cbcl-last-in-sequence-002[+]
X cbcl-last-in-sequence-002: declare function local:generate($arg as xs:integer?) as xs:integer* { if ($arg = 0) then (1, 2, 3) else $arg }; ( local:generate(()), for $x in local:generate(0) return $x + 2 )[last()] |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
cbcl-last-in-sequence-003[+]
X cbcl-last-in-sequence-003: declare function local:generate($arg as xs:integer?) as xs:integer? { if ($arg = 0) then 0 else () }; ( local:generate(()), for $x in local:generate(0) return $x + 2 )[last()] |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
cbcl-last-in-sequence-004[+]
X cbcl-last-in-sequence-004: declare function local:generate($arg as xs:integer?) as xs:integer* { if ($arg = 0) then ( 1, 2, 3 ) else ( $arg ) }; ( local:generate(()), for $x at $p in local:generate(0) return $p + $x)[last()] |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
cbcl-last-in-sequence-005[+]
X cbcl-last-in-sequence-005: declare function local:generate($arg as xs:integer?) as xs:integer? { if ($arg = 0) then 1 else $arg }; ( local:generate(()), for $x at $p in local:generate(0) return $p + $x)[last()] |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
cbcl-last-in-sequence-006[+]
X cbcl-last-in-sequence-006: declare function local:generate($arg as xs:integer?) as xs:string* { if ($arg = 0) then ('a', 'b', 'c') else ('d' ) }; ( if (local:generate(1) = 'd') then () else 1, for $x in local:generate(0) return fn:lower-case($x))[last()] |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
cbcl-last-in-sequence-007[+]
X cbcl-last-in-sequence-007: declare function local:generate($arg as xs:integer?) as xs:integer? { $arg }; ( if (local:generate(0) = 0) then () else 1, for $x in local:generate(0) return -$x)[last()] |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
cbcl-last-in-sequence-008[+]
X cbcl-last-in-sequence-008: ( (<a><b>cheese</b></a>)/b )[last()] |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
cbcl-last-in-sequence-009[+]
X cbcl-last-in-sequence-009: declare function local:generate($arg as xs:integer?) as xs:string* { if ($arg = 0) then ('a', 'b', 'c') else () }; ( local:generate(()), for $x in local:generate(0) return 3)[last()] |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
cbcl-last-in-sequence-010[+]
X cbcl-last-in-sequence-010: declare function local:generate($arg as xs:integer?) as xs:string* { if ($arg = 0) then ('a', 'b', 'c') else () }; boolean(local:generate(0)[last()]) |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
cbcl-last-in-sequence-011[+]
X cbcl-last-in-sequence-011: declare function local:generate($arg as xs:integer?) as xs:string* { if ($arg = 0) then ('a', 'b', 'c') else () }; boolean(local:generate(1)[last()]) |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
cbcl-last-in-sequence-012[+]
X cbcl-last-in-sequence-012: declare function local:generate($arg as xs:boolean) as xs:string+ { if ($arg) then ('a', 'b', 'c') else ('A', 'B', 'C') }; ( for $x in local:generate(true()) return 3)[last()] |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass |