#
# Copyright 2011-2012 Akiban Technologies, Inc.
# 
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# 
#     http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
# ==============================================================
# Script for comprehensive KeyFilter testing. This text file is
# read by com.persistit.ScriptedKeyFilterTest
#
# kf defines a KeyFilter
# key defines a Key value
# lteq, lt, gteq, gt specify directions for the KeyFilter.next() method, followed by the expected value of the Key.
# nudge invokes Key.nudgeRight, Key.nudgeLeft, Key.nudgeDeeper, Key.appendBefore or Key.appendAfer
# ==============================================================

KF {1,*}
KEY {}
GTEQ {}
GTEQ {}
GT {}
GT {}
KEY {1}
GTEQ {1}
KEY {2}
GT <false>

KF {1,*}
KEY {}
LTEQ {1,{after}}
LTEQ {1,{after}}
LT {1,{after}}
KEY {1,1}
LTEQ {1,1}
LT {1,1}
KEY {1}
LT <false>

KF {1,>*}
KEY {}
GTEQ {1,{before}}
KEY {}
GT {1,{before}}
KEY {1,2}
GTEQ {1,2}
GT {1,2}
KEY {2}
GT <false>

KEY {}
NUDGE AFTER
LTEQ {1,{after}}
LT {1,{after}}
KEY {1,2}
LTEQ {1,2}
LT {1,2}
KEY {1}
LTEQ <false>
KEY {1}
LT <false>

KF {1,>*<}
KEY {}
GTEQ {1,{before}}
GT {1,{before}}
LT {1,{before}}
KEY {1}
NUDGE AFTER
GT {1,{after}}
LT {1,{after}}
KEY {1,2}
LT {1,2}
GT {1,2}
NUDGE AFTER
LT {1,2}*
KEY {1,2}
LTEQ {1,2}
NUDGE AFTER
GT {1,2}+

KF {>{(10:20),[50:60],(80:)}<}
KEY {}
GT {10}+
KEY {}
GTEQ {10}+
GT {10}+
KEY {15}
LT {15}
LTEQ {15}
GT {15}
GTEQ {15}
KEY {20}
GT {50}-
KEY {20}
LT {20}-
KEY {20}
LT {20}-
GT {50}-
GTEQ {50}
GT {50}
GTEQ {50}
KEY {70}
LT {60}+
LTEQ {60}
GT {80}+
LT {60}+

KF {10:,>:10<}
KEY {}
GT {10,{before}}
KEY {9,11}
GT {10,{before}}
KEY {10,9}
GT {10,9}
KEY {10,10}
NUDGE LEFT
GT {10,10}-
GTEQ {10,10}-
KEY {10,10}
GTEQ {10,10}
KEY {10,10,1}
GT {10}+
KEY {10,10,1}
GTEQ {10}+
KEY {10,10,1}
LTEQ {10,10}
KEY {10,10,1}
LT {10,10}*

KF {"atlantic",>(float)1.3,"x":"z",{[100:150),[200:250),[300:350)},*<}
KEY {"atlantic",(float)1.3,"x",200,"tom","ZZZ"}
LT {"atlantic",(float)1.3,"x",200,"tom"}*
LT {"atlantic",(float)1.3,"x",200,"tom"}*

KF {{"a":"b","c":"d","e":"f"},{"a":"b","c":"d","e":"f"},{"a":"b","c":"d","e":"f"},{"a":"b","c":"d","e":"f"}}
KEY {"b","b","b"}
GTEQ {"b","b","b"}
GT {"b","b","b"}
KEY {"b","b","b","b"}
GT {"b","b","b","b"}
KEY {"bb"}
LT {"b","f","f","f",{after}}
KEY {"bb"}
GT {"c"}-
KEY {"cc","cc","cc","dd"}
GT {"cc","cc","cc","e"}-
KEY {"cc","cc","cc","dd"}
GTEQ {"cc","cc","cc","e"}

KF {{"a":"b","c":"d","e":"f"},{"a":"b","c":"d","e":"f"},{"a":"b","c":"d","e":"f"},{"a":"b","c":"d","e":"f"}<}
KEY {"b","b","b"}
GTEQ {"b","b","b"}
GT {"b","b","b"}
KEY {"b","b","b","b"}
GT {"b","b","b","c"}-
KEY {"bb"}
LT {"b","f","f","f"}+
KEY {"bb"}
GT {"c"}-
KEY {"cc","cc","cc","dd"}
GT {"cc","cc","cc","e"}-
KEY {"cc","cc","cc","dd"}
GTEQ {"cc","cc","cc","e"}

KF {{"a":"b","c":"d","e":"f"},{"a":"b","c":"d","e":"f"},{"a":"b","c":"d","e":"f"},>{"a":"b","c":"d","e":"f"}<}
KEY {"b","b","b"}
GTEQ {"b","b","b","a"}
KEY {"b","b","b"}
GT {"b","b","b","a"}-
KEY {"b","b","b","b"}
GT {"b","b","b","c"}-
KEY {"bb"}
LT {"b","f","f","f"}+
KEY {"bb"}
GT {"c","a","a","a"}-
KEY {"cc","cc","cc","dd"}
GT {"cc","cc","cc","e"}-
KEY {"cc","cc","cc","dd"}
GTEQ {"cc","cc","cc","e"}

KF {1,[:(long)2),2,*<}
KEY {1,(long)0,4,(long)0}
GT {1,(long)0}+

KF {:0}
KEY {-1}
GT {-1}

#
# Cases added for bug https://bugs.launchpad.net/akiban-persistit/+bug/1046049
#
KF {{:"abc"}}
KEY {}
NUDGE AFTER
GT <false>
GTEQ <false>
LTEQ {"abc",{after}}
LT {"abc",{after}}
