#!/usr/bin/env python3
from .error import Error
from .parse_enums import Acc, Emit, Key
LEX_BYTE_CLASSES = bytearray(b"\000\000\000\000\000\000\000\000\000\001\002\000\000\000\000\000"
b"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
b"\001\003\004\005\006\007\007\007\007\007\010\011\012\013\014\015"
b"\016\017\020\020\020\020\020\020\021\021\022\007\007\007\023\007"
b"\007\024\024\024\025\026\024\027\027\027\027\027\027\027\027\027"
b"\027\027\027\027\027\030\027\027\027\027\027\031\032\033\007\027"
b"\007\034\035\024\025\036\037\027\027\040\027\027\041\027\042\027"
b"\027\027\043\044\045\046\027\027\027\027\027\047\050\051\007\000"
b"\052\052\052\052\052\052\052\052\052\052\052\052\052\052\052\052"
b"\053\053\053\053\053\053\053\053\053\053\053\053\053\053\053\053"
b"\054\054\054\054\054\054\054\054\054\054\054\054\054\054\054\054"
b"\054\054\054\054\054\054\054\054\054\054\054\054\054\054\054\054"
b"\055\055\056\056\056\056\056\056\056\056\056\056\056\056\056\056"
b"\056\056\056\056\056\056\056\056\056\056\056\056\056\056\056\056"
b"\057\060\060\060\060\060\060\060\060\060\060\060\060\061\060\060"
b"\062\063\063\063\064\055\055\055\055\055\055\055\055\055\055\055")
LEX_TRANSITIONS = [
bytearray(b"\214\220\201\113\041\125\115\220\117\002\124\003\001\001\004\005\005\005\013\067"
b"\001\001\001\001\001\120\220\121\001\001\001\024\031\001\014\001\001\020\001\122"
b"\101\123\215\215\215\215\215\215\215\215\215\215\215"),
bytearray(b"\223\223\223\223\223\223\223\223\223\001\223\001\001\001\001\001\001\001\013\223"
b"\001\001\001\001\001\223\223\223\001\001\001\001\001\001\001\001\001\001\001\223"
b"\223\223\223\223\223\223\223\223\223\223\223\223\223"),
bytearray(b"\223\223\223\223\223\223\223\223\223\001\223\001\001\001\004\005\005\005\013\223"
b"\001\001\001\001\001\223\223\223\001\001\001\001\031\001\001\001\001\001\001\223"
b"\223\223\223\223\223\223\223\223\223\223\223\223\223"),
bytearray(b"\223\223\223\223\223\223\223\223\223\001\223\001\001\001\004\005\005\005\013\223"
b"\001\001\001\001\001\223\223\223\001\001\001\001\034\001\001\001\001\001\001\223"
b"\223\223\223\223\223\223\223\223\223\223\223\223\223"),
bytearray(b"\324\324\324\324\324\324\324\324\324\001\324\001\006\001\001\001\001\001\013\324"
b"\001\001\010\001\001\324\324\324\001\001\010\001\001\001\001\001\001\001\001\324"
b"\324\324\324\324\324\324\324\324\324\324\324\324\324"),
bytearray(b"\324\324\324\324\324\324\324\324\324\001\324\001\006\001\005\005\005\005\013\324"
b"\001\001\010\001\001\324\324\324\001\001\010\001\001\001\001\001\001\001\001\324"
b"\324\324\324\324\324\324\324\324\324\324\324\324\324"),
bytearray(b"\223\223\223\223\223\223\223\223\223\001\223\001\001\001\007\007\007\007\013\223"
b"\001\001\001\001\001\223\223\223\001\001\001\001\001\001\001\001\001\001\001\223"
b"\223\223\223\223\223\223\223\223\223\223\223\223\223"),
bytearray(b"\325\325\325\325\325\325\325\325\325\001\325\001\001\001\007\007\007\007\013\325"
b"\001\001\010\001\001\325\325\325\001\001\010\001\001\001\001\001\001\001\001\325"
b"\325\325\325\325\325\325\325\325\325\325\325\325\325"),
bytearray(b"\223\223\223\223\223\223\223\223\223\011\223\011\001\001\012\012\012\012\013\223"
b"\001\001\001\001\001\223\223\223\001\001\001\001\001\001\001\001\001\001\001\223"
b"\223\223\223\223\223\223\223\223\223\223\223\223\223"),
bytearray(b"\223\223\223\223\223\223\223\223\223\001\223\001\001\001\012\012\012\012\013\223"
b"\001\001\001\001\001\223\223\223\001\001\001\001\001\001\001\001\001\001\001\223"
b"\223\223\223\223\223\223\223\223\223\223\223\223\223"),
bytearray(b"\325\325\325\325\325\325\325\325\325\001\325\001\001\001\012\012\012\012\013\325"
b"\001\001\001\001\001\325\325\325\001\001\001\001\001\001\001\001\001\001\001\325"
b"\325\325\325\325\325\325\325\325\325\325\325\325\325"),
bytearray(b"\322\322\322\322\322\322\322\322\322\322\322\322\322\322\322\322\322\322\322\322"
b"\322\322\322\322\322\322\322\322\322\322\322\322\322\322\322\322\322\322\322\322"
b"\322\322\322\322\322\322\322\322\322\322\322\322\322"),
bytearray(b"\223\223\223\223\223\223\223\223\223\001\223\001\001\001\001\001\001\001\013\223"
b"\001\001\001\001\001\223\223\223\037\001\001\001\001\001\001\001\001\001\015\223"
b"\223\223\223\223\223\223\223\223\223\223\223\223\223"),
bytearray(b"\223\223\223\223\223\223\223\223\223\001\223\001\001\001\001\001\001\001\013\223"
b"\001\001\001\001\001\223\223\223\001\001\001\001\001\016\001\001\001\001\001\223"
b"\223\223\223\223\223\223\223\223\223\223\223\223\223"),
bytearray(b"\223\223\223\223\223\223\223\223\223\001\223\001\001\001\001\001\001\001\013\223"
b"\001\001\001\001\001\223\223\223\001\001\001\001\001\017\001\001\001\001\001\223"
b"\223\223\223\223\223\223\223\223\223\223\223\223\223"),
bytearray(b"\314\314\314\314\314\314\314\314\314\001\314\001\001\001\001\001\001\001\013\314"
b"\001\001\001\001\001\314\314\314\001\001\001\001\001\001\001\001\001\001\001\314"
b"\314\314\314\314\314\314\314\314\314\314\314\314\314"),
bytearray(b"\223\223\223\223\223\223\223\223\223\001\223\001\001\001\001\001\001\001\013\223"
b"\001\001\001\001\001\223\223\223\001\001\001\001\001\001\001\021\001\001\001\223"
b"\223\223\223\223\223\223\223\223\223\223\223\223\223"),
bytearray(b"\223\223\223\223\223\223\223\223\223\001\223\001\001\001\001\001\001\001\013\223"
b"\001\001\001\001\001\223\223\223\001\001\001\001\001\001\001\001\001\001\022\223"
b"\223\223\223\223\223\223\223\223\223\223\223\223\223"),
bytearray(b"\223\223\223\223\223\223\223\223\223\001\223\001\001\001\001\001\001\001\013\223"
b"\001\001\001\001\001\223\223\223\001\001\023\001\001\001\001\001\001\001\001\223"
b"\223\223\223\223\223\223\223\223\223\223\223\223\223"),
bytearray(b"\315\315\315\315\315\315\315\315\315\001\315\001\001\001\001\001\001\001\013\315"
b"\001\001\001\001\001\315\315\315\001\001\001\001\001\001\001\001\001\001\001\315"
b"\315\315\315\315\315\315\315\315\315\315\315\315\315"),
bytearray(b"\223\223\223\223\223\223\223\223\223\001\223\001\001\001\001\001\001\001\013\223"
b"\001\001\001\001\001\223\223\223\025\001\001\001\001\001\001\001\001\001\001\223"
b"\223\223\223\223\223\223\223\223\223\223\223\223\223"),
bytearray(b"\223\223\223\223\223\223\223\223\223\001\223\001\001\001\001\001\001\001\013\223"
b"\001\001\001\001\001\223\223\223\001\001\001\001\001\026\001\001\001\001\001\223"
b"\223\223\223\223\223\223\223\223\223\223\223\223\223"),
bytearray(b"\223\223\223\223\223\223\223\223\223\001\223\001\001\001\001\001\001\001\013\223"
b"\001\001\001\001\001\223\223\223\001\001\001\001\001\001\001\001\027\001\001\223"
b"\223\223\223\223\223\223\223\223\223\223\223\223\223"),
bytearray(b"\223\223\223\223\223\223\223\223\223\001\223\001\001\001\001\001\001\001\013\223"
b"\001\001\001\001\001\223\223\223\001\001\030\001\001\001\001\001\001\001\001\223"
b"\223\223\223\223\223\223\223\223\223\223\223\223\223"),
bytearray(b"\316\316\316\316\316\316\316\316\316\001\316\001\001\001\001\001\001\001\013\316"
b"\001\001\001\001\001\316\316\316\001\001\001\001\001\001\001\001\001\001\001\316"
b"\316\316\316\316\316\316\316\316\316\316\316\316\316"),
bytearray(b"\223\223\223\223\223\223\223\223\223\001\223\001\001\001\001\001\001\001\013\223"
b"\001\001\001\001\001\223\223\223\001\001\001\001\001\001\032\001\001\001\001\223"
b"\223\223\223\223\223\223\223\223\223\223\223\223\223"),
bytearray(b"\223\223\223\223\223\223\223\223\223\001\223\001\001\001\001\001\001\001\013\223"
b"\001\001\001\001\001\223\223\223\001\001\001\033\001\001\001\001\001\001\001\223"
b"\223\223\223\223\223\223\223\223\223\223\223\223\223"),
bytearray(b"\317\317\317\317\317\317\317\317\317\001\317\001\001\001\001\001\001\001\013\317"
b"\001\001\001\001\001\317\317\317\001\001\001\001\001\001\001\001\001\001\001\317"
b"\317\317\317\317\317\317\317\317\317\317\317\317\317"),
bytearray(b"\223\223\223\223\223\223\223\223\223\001\223\001\001\001\001\001\001\001\013\223"
b"\001\001\001\001\001\223\223\223\001\001\001\001\001\001\035\001\001\001\001\223"
b"\223\223\223\223\223\223\223\223\223\223\223\223\223"),
bytearray(b"\223\223\223\223\223\223\223\223\223\001\223\001\001\001\001\001\001\001\013\223"
b"\001\001\001\001\001\223\223\223\001\001\001\036\001\001\001\001\001\001\001\223"
b"\223\223\223\223\223\223\223\223\223\223\223\223\223"),
bytearray(b"\320\320\320\320\320\320\320\320\320\001\320\001\001\001\001\001\001\001\013\320"
b"\001\001\001\001\001\320\320\320\001\001\001\001\001\001\001\001\001\001\001\320"
b"\320\320\320\320\320\320\320\320\320\320\320\320\320"),
bytearray(b"\223\223\223\223\223\223\223\223\223\001\223\001\001\001\001\001\001\001\013\223"
b"\001\001\001\001\001\223\223\223\001\001\001\001\001\001\040\001\001\001\001\223"
b"\223\223\223\223\223\223\223\223\223\223\223\223\223"),
bytearray(b"\321\321\321\321\321\321\321\321\321\001\321\001\001\001\001\001\001\001\013\321"
b"\001\001\001\001\001\321\321\321\001\001\001\001\001\001\001\001\001\001\001\321"
b"\321\321\321\321\321\321\321\321\321\321\321\321\321"),
bytearray(b"\214\041\226\041\065\041\041\041\041\041\041\041\041\041\041\041\041\041\041\041"
b"\041\041\041\041\041\041\051\041\041\041\041\041\041\041\041\041\041\041\041\041"
b"\041\041\216\216\216\216\050\042\047\043\044\046\045"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\050\217\217\217\217\217\217\217\217"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\050\050\217\217\217\217\217\217\217\217\217"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\047\047\217\217\217\217\217\217\217\217"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\047\217\217\217\217\217\217\217\217\217\217"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\047\047\047\217\217\217\217\217\217\217\217"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\050\050\050\217\217\217\217\217\217\217\217"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\041\041\041\217\217\217\217\217\217\217\217"),
bytearray(b"\224\224\226\224\041\224\224\224\224\224\224\224\224\041\224\224\224\224\224\224"
b"\224\224\224\224\052\224\041\224\224\041\224\041\224\224\041\041\224\041\060\224"
b"\224\224\224\224\224\224\224\224\224\224\224\224\224"),
bytearray(b"\225\225\226\225\225\225\225\225\225\225\225\225\225\225\053\225\225\225\225\225"
b"\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225"
b"\225\225\225\225\225\225\225\225\225\225\225\225\225"),
bytearray(b"\225\225\226\225\225\225\225\225\225\225\225\225\225\225\054\225\225\225\225\225"
b"\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225"
b"\225\225\225\225\225\225\225\225\225\225\225\225\225"),
bytearray(b"\225\225\226\225\225\225\225\225\225\225\225\225\225\225\056\055\225\225\225\225"
b"\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225"
b"\225\225\225\225\225\225\225\225\225\225\225\225\225"),
bytearray(b"\225\225\226\225\225\225\225\225\225\225\225\225\225\225\057\225\225\225\225\225"
b"\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225"
b"\225\225\225\225\225\225\225\225\225\225\225\225\225"),
bytearray(b"\225\225\226\225\225\225\225\225\225\225\225\225\225\225\060\057\057\057\225\225"
b"\057\057\057\225\225\225\225\225\057\057\057\057\225\225\225\225\225\225\225\225"
b"\225\225\225\225\225\225\225\225\225\225\225\225\225"),
bytearray(b"\225\225\226\225\225\225\225\225\225\225\225\225\225\225\061\061\061\061\225\225"
b"\061\061\061\225\225\225\225\225\061\061\061\061\225\225\225\225\225\225\225\225"
b"\225\225\225\225\225\225\225\225\225\225\225\225\225"),
bytearray(b"\225\225\226\225\225\225\225\225\225\225\225\225\225\225\061\061\061\061\225\225"
b"\061\064\061\225\225\225\225\225\061\061\061\061\225\225\225\225\225\225\225\225"
b"\225\225\225\225\225\225\225\225\225\225\225\225\225"),
bytearray(b"\225\225\226\225\225\225\225\225\225\225\225\225\225\225\062\062\062\062\225\225"
b"\062\062\062\225\225\225\225\225\062\062\062\062\225\225\225\225\225\225\225\225"
b"\225\225\225\225\225\225\225\225\225\225\225\225\225"),
bytearray(b"\225\225\226\225\225\225\225\225\225\225\225\225\225\225\063\063\063\063\225\225"
b"\063\063\063\225\225\225\225\225\063\063\063\063\225\225\225\225\225\225\225\225"
b"\225\225\225\225\225\225\225\225\225\225\225\225\225"),
bytearray(b"\225\225\226\225\225\225\225\225\225\225\225\225\225\225\041\041\041\041\225\225"
b"\041\041\041\225\225\225\225\225\041\041\041\041\225\225\225\225\225\225\225\225"
b"\225\225\225\225\225\225\225\225\225\225\225\225\225"),
bytearray(b"\225\225\226\225\225\225\225\225\225\225\225\225\225\225\062\062\062\225\225\225"
b"\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225\225"
b"\225\225\225\225\225\225\225\225\225\225\225\225\225"),
bytearray(b"\327\327\327\327\327\327\327\327\327\327\327\327\327\327\327\327\327\327\066\327"
b"\327\327\327\327\327\327\327\327\327\327\327\327\327\327\327\327\327\327\327\327"
b"\327\327\327\327\327\327\327\327\327\327\327\327\327"),
bytearray(b"\323\323\323\323\323\323\323\323\323\323\323\323\323\323\323\323\323\323\323\323"
b"\323\323\323\323\323\323\323\323\323\323\323\323\323\323\323\323\323\323\323\323"
b"\323\323\323\323\323\323\323\323\323\323\323\323\323"),
bytearray(b"\214\077\311\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100"
b"\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100"
b"\100\100\216\216\216\216\076\070\075\071\072\074\073"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\076\217\217\217\217\217\217\217\217"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\076\076\217\217\217\217\217\217\217\217\217"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\075\075\217\217\217\217\217\217\217\217"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\075\217\217\217\217\217\217\217\217\217\217"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\075\075\075\217\217\217\217\217\217\217\217"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\076\076\076\217\217\217\217\217\217\217\217"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\100\100\100\217\217\217\217\217\217\217\217"),
bytearray(b"\214\100\311\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100"
b"\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100"
b"\100\100\216\216\216\216\076\070\075\071\072\074\073"),
bytearray(b"\214\100\330\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100"
b"\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100"
b"\100\100\216\216\216\216\076\070\075\071\072\074\073"),
bytearray(b"\214\111\312\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112"
b"\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112"
b"\112\112\216\216\216\216\110\102\107\103\104\106\105"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\110\217\217\217\217\217\217\217\217"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\110\110\217\217\217\217\217\217\217\217\217"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\107\107\217\217\217\217\217\217\217\217"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\107\217\217\217\217\217\217\217\217\217\217"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\107\107\107\217\217\217\217\217\217\217\217"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\110\110\110\217\217\217\217\217\217\217\217"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\112\112\112\217\217\217\217\217\217\217\217"),
bytearray(b"\214\112\312\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112"
b"\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112"
b"\112\112\216\216\216\216\110\102\107\103\104\106\105"),
bytearray(b"\214\112\331\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112"
b"\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112\112"
b"\112\112\216\216\216\216\110\102\107\103\104\106\105"),
bytearray(b"\227\114\313\227\227\227\227\227\227\227\227\227\227\227\227\227\227\227\227\227"
b"\227\227\227\227\227\227\227\227\227\227\227\227\227\227\227\227\227\227\227\227"
b"\227\227\227\227\227\227\227\227\227\227\227\227\227"),
bytearray(b"\214\227\313\227\227\227\227\227\227\227\227\227\227\227\227\227\227\227\227\227"
b"\227\227\227\227\227\227\227\227\227\227\227\227\227\227\227\227\227\227\227\227"
b"\227\227\215\215\215\215\215\215\215\215\215\215\215"),
bytearray(b"\326\115\326\326\326\326\326\326\326\221\326\221\221\221\116\116\116\116\326\326"
b"\116\116\116\221\221\326\326\326\116\116\116\116\221\221\221\221\221\221\221\326"
b"\326\326\326\326\326\326\326\326\326\326\326\326\326"),
bytearray(b"\222\222\222\222\222\222\222\222\222\221\222\221\221\221\115\115\115\115\222\222"
b"\115\115\115\221\221\222\222\222\115\115\115\115\221\221\221\221\221\221\221\222"
b"\222\222\222\222\222\222\222\222\222\222\222\222\222"),
bytearray(b"\303\303\303\303\303\303\303\303\303\303\303\303\303\303\303\303\303\303\303\303"
b"\303\303\303\303\303\303\303\303\303\303\303\303\303\303\303\303\303\303\303\303"
b"\303\303\303\303\303\303\303\303\303\303\303\303\303"),
bytearray(b"\304\304\304\304\304\304\304\304\304\304\304\304\304\304\304\304\304\304\304\304"
b"\304\304\304\304\304\304\304\304\304\304\304\304\304\304\304\304\304\304\304\304"
b"\304\304\304\304\304\304\304\304\304\304\304\304\304"),
bytearray(b"\305\305\305\305\305\305\305\305\305\305\305\305\305\305\305\305\305\305\305\305"
b"\305\305\305\305\305\305\305\305\305\305\305\305\305\305\305\305\305\305\305\305"
b"\305\305\305\305\305\305\305\305\305\305\305\305\305"),
bytearray(b"\306\306\306\306\306\306\306\306\306\306\306\306\306\306\306\306\306\306\306\306"
b"\306\306\306\306\306\306\306\306\306\306\306\306\306\306\306\306\306\306\306\306"
b"\306\306\306\306\306\306\306\306\306\306\306\306\306"),
bytearray(b"\307\307\307\307\307\307\307\307\307\307\307\307\307\307\307\307\307\307\307\307"
b"\307\307\307\307\307\307\307\307\307\307\307\307\307\307\307\307\307\307\307\307"
b"\307\307\307\307\307\307\307\307\307\307\307\307\307"),
bytearray(b"\310\310\310\310\310\310\310\310\310\310\310\310\310\310\310\310\310\310\310\310"
b"\310\310\310\310\310\310\310\310\310\310\310\310\310\310\310\310\310\310\310\310"
b"\310\310\310\310\310\310\310\310\310\310\310\310\310"),
bytearray(b"\214\125\332\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125"
b"\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125"
b"\125\125\216\216\216\216\134\126\133\127\130\132\131"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\134\217\217\217\217\217\217\217\217"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\134\134\217\217\217\217\217\217\217\217\217"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\133\133\217\217\217\217\217\217\217\217"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\133\217\217\217\217\217\217\217\217\217\217"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\133\133\133\217\217\217\217\217\217\217\217"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\134\134\134\217\217\217\217\217\217\217\217"),
bytearray(b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217\217"
b"\217\217\125\125\125\217\217\217\217\217\217\217\217"),
]
PARSE_DEFS = [
(Error.LONG, None, [], [], None),
(None, None, [1], [], None),
(None, Emit.NULL, [], [], None),
(None, Emit.TRUE, [], [], None),
(None, Emit.FALSE, [], [], None),
(None, Emit.INF, [], [], None),
(None, Emit.NEG_INF, [], [], None),
(None, Emit.NAN, [], [], None),
(None, Emit.INT, [], [], None),
(None, Emit.FLOAT, [], [], None),
(None, Emit.STRING, [], [], None),
(None, Emit.DATA, [], [], None),
(None, Emit.SHORT_ARRAY_IN, [17], [], None),
(None, Emit.SHORT_MAP_IN, [21], [], None),
(None, None, [2], [], None),
(None, Emit.NULL, [3], [], None),
(None, Emit.TRUE, [3], [], None),
(None, Emit.FALSE, [3], [], None),
(None, Emit.INF, [3], [], None),
(None, Emit.NEG_INF, [3], [], None),
(None, Emit.NAN, [3], [], None),
(None, Emit.INT, [3], [], None),
(None, Emit.FLOAT, [3], [], None),
(None, Emit.STRING, [3], [], None),
(None, None, [9], [Acc.DATA], None),
(None, None, [13], [Acc.STRING], None),
(None, None, [11], [], None),
(None, None, [15], [], None),
(None, Emit.SHORT_ARRAY_IN, [3, 17], [], None),
(None, Emit.LONG_ARRAY_IN, [19, 0], [], None),
(None, Emit.SHORT_MAP_IN, [3, 21], [], None),
(None, Emit.LONG_MAP_IN, [24, 0], [], Key.UNQUOTED),
(None, Emit.LONG_MAP_IN, [24, 0], [], Key.QUOTED),
(Error.SUFFIX, None, [], [], None),
(None, None, [2, 5], [], None),
(None, None, [3, 5], [], None),
(None, None, [4], [], None),
(None, None, [], [], None),
(None, None, [3], [], None),
(Error.SIBLING, None, [], [], None),
(Error.CHILD, None, [], [], None),
(None, None, [6], [], None),
(None, None, [6, 5], [], None),
(None, None, [5], [], None),
(Error.SHORT, None, [], [], None),
(None, None, [9], [], None),
(None, None, [9, 5], [], None),
(None, None, [8], [], None),
(None, Emit.ACC_DATA, [], [], None),
(None, None, [13], [Acc.NL, Acc.STRING], None),
(None, None, [11], [Acc.NL], None),
(None, None, [11, 5], [], None),
(None, None, [10], [], None),
(None, Emit.ACC_STRING, [], [Acc.NL], None),
(None, None, [13], [], None),
(None, None, [13], [Acc.SP, Acc.STRING], None),
(None, None, [13, 5], [], None),
(None, None, [12], [], None),
(Error.BANG_LAST, None, [], [], None),
(None, None, [15, 5], [], None),
(None, None, [14], [], None),
(None, Emit.ACC_STRING, [], [], None),
(Error.ARRAY_END, None, [], [], None),
(None, None, [16, 7], [], None),
(None, Emit.SHORT_ARRAY_OUT, [], [], None),
(None, Emit.NULL, [16], [], None),
(None, Emit.TRUE, [16], [], None),
(None, Emit.FALSE, [16], [], None),
(None, Emit.INF, [16], [], None),
(None, Emit.NEG_INF, [16], [], None),
(None, Emit.NAN, [16], [], None),
(None, Emit.INT, [16], [], None),
(None, Emit.FLOAT, [16], [], None),
(None, Emit.STRING, [16], [], None),
(None, Emit.DATA, [16], [], None),
(None, Emit.SHORT_ARRAY_IN, [16, 17], [], None),
(None, Emit.SHORT_MAP_IN, [16, 21], [], None),
(None, None, [19], [], None),
(None, None, [19, 0], [], None),
(None, None, [19, 5], [], None),
(None, None, [18], [], None),
(None, Emit.LONG_ARRAY_OUT, [], [], None),
(Error.MAP_END, None, [], [], None),
(None, None, [20, 22], [], None),
(None, Emit.SHORT_MAP_OUT, [], [], None),
(Error.MAP_KEY, None, [], [], None),
(None, None, [20, 7], [], Key.UNQUOTED),
(None, None, [20, 7], [], Key.QUOTED),
(None, None, [7], [], Key.UNQUOTED),
(None, None, [7], [], Key.QUOTED),
(None, None, [24], [], None),
(None, None, [24, 0], [], Key.UNQUOTED),
(None, None, [24, 0], [], Key.QUOTED),
(None, None, [24, 5], [], None),
(None, None, [23], [], None),
(None, Emit.LONG_MAP_OUT, [], [], None),
]
PARSE_TABLE = [
[PARSE_DEFS[1], PARSE_DEFS[0], PARSE_DEFS[0], PARSE_DEFS[0], PARSE_DEFS[12],
PARSE_DEFS[0], PARSE_DEFS[13], PARSE_DEFS[0], PARSE_DEFS[0], PARSE_DEFS[0],
PARSE_DEFS[0], PARSE_DEFS[0], PARSE_DEFS[2], PARSE_DEFS[3], PARSE_DEFS[4],
PARSE_DEFS[5], PARSE_DEFS[6], PARSE_DEFS[7], PARSE_DEFS[0], PARSE_DEFS[0],
PARSE_DEFS[8], PARSE_DEFS[9], PARSE_DEFS[11], PARSE_DEFS[10], PARSE_DEFS[0],
PARSE_DEFS[0], PARSE_DEFS[0]],
[PARSE_DEFS[0], PARSE_DEFS[0], PARSE_DEFS[0], PARSE_DEFS[29], PARSE_DEFS[28],
PARSE_DEFS[0], PARSE_DEFS[30], PARSE_DEFS[0], PARSE_DEFS[0], PARSE_DEFS[26],
PARSE_DEFS[26], PARSE_DEFS[27], PARSE_DEFS[15], PARSE_DEFS[16], PARSE_DEFS[17],
PARSE_DEFS[18], PARSE_DEFS[19], PARSE_DEFS[20], PARSE_DEFS[31], PARSE_DEFS[32],
PARSE_DEFS[21], PARSE_DEFS[22], PARSE_DEFS[24], PARSE_DEFS[23], PARSE_DEFS[25],
PARSE_DEFS[25], PARSE_DEFS[14]],
[PARSE_DEFS[34], PARSE_DEFS[1], PARSE_DEFS[0], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33]],
[PARSE_DEFS[35], PARSE_DEFS[36], PARSE_DEFS[37], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[38]],
[PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[0], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[38]],
[PARSE_DEFS[40], PARSE_DEFS[40], PARSE_DEFS[0], PARSE_DEFS[40], PARSE_DEFS[40],
PARSE_DEFS[40], PARSE_DEFS[40], PARSE_DEFS[40], PARSE_DEFS[40], PARSE_DEFS[40],
PARSE_DEFS[40], PARSE_DEFS[40], PARSE_DEFS[40], PARSE_DEFS[40], PARSE_DEFS[40],
PARSE_DEFS[40], PARSE_DEFS[40], PARSE_DEFS[40], PARSE_DEFS[40], PARSE_DEFS[40],
PARSE_DEFS[40], PARSE_DEFS[40], PARSE_DEFS[40], PARSE_DEFS[40], PARSE_DEFS[40],
PARSE_DEFS[40], PARSE_DEFS[41]],
[PARSE_DEFS[42], PARSE_DEFS[43], PARSE_DEFS[37], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33]],
[PARSE_DEFS[44], PARSE_DEFS[44], PARSE_DEFS[44], PARSE_DEFS[44], PARSE_DEFS[12],
PARSE_DEFS[44], PARSE_DEFS[13], PARSE_DEFS[44], PARSE_DEFS[44], PARSE_DEFS[44],
PARSE_DEFS[44], PARSE_DEFS[44], PARSE_DEFS[2], PARSE_DEFS[3], PARSE_DEFS[4],
PARSE_DEFS[5], PARSE_DEFS[6], PARSE_DEFS[7], PARSE_DEFS[44], PARSE_DEFS[44],
PARSE_DEFS[8], PARSE_DEFS[9], PARSE_DEFS[11], PARSE_DEFS[10], PARSE_DEFS[44],
PARSE_DEFS[44], PARSE_DEFS[44]],
[PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[24], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[45]],
[PARSE_DEFS[46], PARSE_DEFS[47], PARSE_DEFS[48], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[45]],
[PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[50],
PARSE_DEFS[50], PARSE_DEFS[27], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[49],
PARSE_DEFS[49], PARSE_DEFS[26]],
[PARSE_DEFS[51], PARSE_DEFS[52], PARSE_DEFS[53], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33]],
[PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[50],
PARSE_DEFS[50], PARSE_DEFS[27], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[55],
PARSE_DEFS[49], PARSE_DEFS[54]],
[PARSE_DEFS[56], PARSE_DEFS[57], PARSE_DEFS[53], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33]],
[PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[58],
PARSE_DEFS[58], PARSE_DEFS[58], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[58],
PARSE_DEFS[58], PARSE_DEFS[27]],
[PARSE_DEFS[59], PARSE_DEFS[60], PARSE_DEFS[61], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33]],
[PARSE_DEFS[62], PARSE_DEFS[62], PARSE_DEFS[62], PARSE_DEFS[62], PARSE_DEFS[62],
PARSE_DEFS[64], PARSE_DEFS[62], PARSE_DEFS[62], PARSE_DEFS[63], PARSE_DEFS[62],
PARSE_DEFS[62], PARSE_DEFS[62], PARSE_DEFS[62], PARSE_DEFS[62], PARSE_DEFS[62],
PARSE_DEFS[62], PARSE_DEFS[62], PARSE_DEFS[62], PARSE_DEFS[62], PARSE_DEFS[62],
PARSE_DEFS[62], PARSE_DEFS[62], PARSE_DEFS[62], PARSE_DEFS[62], PARSE_DEFS[62],
PARSE_DEFS[62], PARSE_DEFS[62]],
[PARSE_DEFS[44], PARSE_DEFS[44], PARSE_DEFS[44], PARSE_DEFS[44], PARSE_DEFS[75],
PARSE_DEFS[64], PARSE_DEFS[76], PARSE_DEFS[44], PARSE_DEFS[44], PARSE_DEFS[44],
PARSE_DEFS[44], PARSE_DEFS[44], PARSE_DEFS[65], PARSE_DEFS[66], PARSE_DEFS[67],
PARSE_DEFS[68], PARSE_DEFS[69], PARSE_DEFS[70], PARSE_DEFS[44], PARSE_DEFS[44],
PARSE_DEFS[71], PARSE_DEFS[72], PARSE_DEFS[74], PARSE_DEFS[73], PARSE_DEFS[44],
PARSE_DEFS[44], PARSE_DEFS[44]],
[PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[78], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[77]],
[PARSE_DEFS[79], PARSE_DEFS[80], PARSE_DEFS[81], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[77]],
[PARSE_DEFS[82], PARSE_DEFS[82], PARSE_DEFS[82], PARSE_DEFS[82], PARSE_DEFS[82],
PARSE_DEFS[82], PARSE_DEFS[82], PARSE_DEFS[84], PARSE_DEFS[83], PARSE_DEFS[82],
PARSE_DEFS[82], PARSE_DEFS[82], PARSE_DEFS[82], PARSE_DEFS[82], PARSE_DEFS[82],
PARSE_DEFS[82], PARSE_DEFS[82], PARSE_DEFS[82], PARSE_DEFS[82], PARSE_DEFS[82],
PARSE_DEFS[82], PARSE_DEFS[82], PARSE_DEFS[82], PARSE_DEFS[82], PARSE_DEFS[82],
PARSE_DEFS[82], PARSE_DEFS[82]],
[PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[85],
PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[84], PARSE_DEFS[85], PARSE_DEFS[85],
PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[85],
PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[86], PARSE_DEFS[87],
PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[85],
PARSE_DEFS[85], PARSE_DEFS[85]],
[PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[85],
PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[85],
PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[85],
PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[88], PARSE_DEFS[89],
PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[85], PARSE_DEFS[85],
PARSE_DEFS[85], PARSE_DEFS[85]],
[PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[91], PARSE_DEFS[92],
PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39], PARSE_DEFS[39],
PARSE_DEFS[39], PARSE_DEFS[90]],
[PARSE_DEFS[93], PARSE_DEFS[94], PARSE_DEFS[95], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33], PARSE_DEFS[33],
PARSE_DEFS[33], PARSE_DEFS[90]],
]
#!/usr/bin/python3
from pddl.parser import *
from pddl.lisp_parser import parse_lisp_iterator
from pddl.errors import BraceError, ParseError
from py.test import raises
## helper functions
def varListTest(varList):
assert [k.name for k in varList] == ['?x', '?y', '?z']
assert len([k for k in varList if k.typed]) == 3
assert [k.types[0] for k in varList] == ['block', 'foo', 'block']
def keywordListTest(keyList):
assert [k.name for k in keyList] == ['name', 'parameters', 'foo']
## the tests
def test_parseKeywordSimple():
test = ['(:parameters )']
iter = parse_lisp_iterator(test)
key = parse_keyword(next(iter))
assert key.name == 'parameters'
def test_parseKeywordComplex():
test = [' ( :name)']
iter = parse_lisp_iterator(test)
key = parse_keyword(next(iter))
assert key.name == 'name'
def test_parseKeywordList():
test = ['(:name :parameters :foo )']
iter = parse_lisp_iterator(test)
keys = parse_keyword_list(iter)
assert iter.empty()
keywordListTest(keys)
def test_parseRequirements():
test = ['(:requirements :name :parameters :foo )']
iter = parse_lisp_iterator(test)
req = parse_requirements_stmt(iter)
assert iter.empty()
keywordListTest(req.keywords)
def test_parseRequirements2():
test = ['(:predicates :name :parameters :foo )']
iter = parse_lisp_iterator(test)
with raises(ValueError):
parse_requirements_stmt(iter)
def test_parseVariableNoTyping():
test = [' ( ?x)']
iter = parse_lisp_iterator(test)
key = parse_variable(next(iter))
assert key.name == '?x'
assert key.typed == False
assert key.types == None
def test_parseVariableTyping():
test = [' ( ?x - block)']
iter = parse_lisp_iterator(test)
vlist = parse_typed_var_list(iter)
assert len(vlist) == 1
assert vlist[0].name == '?x'
assert vlist[0].typed == True
assert vlist[0].types[0] == 'block'
def test_parseVariableList():
test = [' ( ?x - block ?y - foo ?z - block )']
iter = parse_lisp_iterator(test)
key = parse_typed_var_list(iter)
varListTest(key)
def test_parseParameters():
test = ['(:parameters ( ?x - block ?y - foo ?z - block ))']
iter = parse_lisp_iterator(test)
key = parse_parameters(iter)
varListTest(key)
def test_parseParameters2():
test = ['(:predicates ( ?x - block ?y - foo ?z - block ))']
iter = parse_lisp_iterator(test)
with raises(ValueError):
parse_parameters(iter)
def test_parseTypes():
test = ['(:types block plane key)']
iter = parse_lisp_iterator(test)
tlist = parse_types_stmt(iter)
assert [t.name for t in tlist] == ['block', 'plane', 'key']
def test_parseTypesFail():
test = ['(:types :block plane key)']
iter = parse_lisp_iterator(test)
with raises(ValueError):
parse_types_stmt(iter)
def test_parseTypesFail2():
test = ['(:predicates :block plane key)']
iter = parse_lisp_iterator(test)
with raises(ValueError):
parse_types_stmt(iter)
def test_parseDomainStatement():
test = ['(domain supertest-23-v0)']
iter = parse_lisp_iterator(test)
dom = parse_domain_stmt(iter)
assert dom.name == 'supertest-23-v0'
def test_parseDomainStatementFail():
test = ['(domaiin supertest-23-v0)']
iter = parse_lisp_iterator(test)
with raises(ValueError):
parse_domain_stmt(iter)
def test_parsePredicate():
test = ['(on ?x ?y)']
iter = parse_lisp_iterator(test)
pred = parse_predicate(iter)
assert pred.name == 'on'
assert [x.name for x in pred.parameters] == ['?x', '?y']
def test_parsePredicateMixed():
test = ['(on ?x - block ?y)']
iter = parse_lisp_iterator(test)
pred = parse_predicate(iter)
assert pred.name == 'on'
assert [x.name for x in pred.parameters] == ['?x', '?y']
assert [x.types[0] for x in pred.parameters
if x.types != None] == ['block']
def test_parsePredicateList():
test = ['((on ?x - block ?y) (put ?x ?z) (true))']
iter = parse_lisp_iterator(test)
predlist = parse_predicate_list(iter)
assert [x.name for x in predlist] == ['on', 'put', 'true']
def test_parseFormula():
test = ['(and (on ?x table) (true) (free ?x))']
iter = parse_lisp_iterator(test)
print(iter)
formula = parse_formula(iter)
assert formula.key == 'and'
assert [c.key for c in formula.children] == ['on', 'true', 'free']
assert [c.key.name for c in formula.children[0].children
if c.type == TypeVariable] == ['?x']
assert [c.key for c in formula.children[0].children
if c.type == TypeConstant] == ['table']
assert [c.key.name for c in formula.children[2].children
if c.type == TypeVariable] == ['?x']
assert [c for c in formula.children[1].children] == []
def test_parseFormulaFail():
test = ['(and (on ?x table) (:true) (free ?x))']
iter = parse_lisp_iterator(test)
with raises(ValueError):
parse_formula(iter)
def test_parseFormulaLispFail2():
test = ['(and (on ?x table) (true) (free( ?x))']
with raises(ParseError):
iter = parse_lisp_iterator(test)
def test_parse_variable():
test = ['(x)']
iter = parse_lisp_iterator(test)
with raises(ValueError):
parse_variable(next(iter))
def test_lisp_parser_start_brace():
test = ['test string)']
with raises(ParseError):
iter = parse_lisp_iterator(test)
def test_parse_keyword_raise():
test = ['(?test)']
iter = parse_lisp_iterator(test)
with raises(ValueError):
parse_keyword(next(iter))
def test_parse_objects_stmt_fail():
test = ['(:predicates blubb blubb)']
iter = parse_lisp_iterator(test)
with raises(ValueError):
parse_objects_stmt(iter)
def test_parse_constants_stmt_fail():
test = ['(:predicates blubb blubb)']
iter = parse_lisp_iterator(test)
with raises(ValueError):
parse_constants_stmt(iter)
def test_parse_problem_domain_stmt_fail():
test = ['(:predicates blubb blubb)']
iter = parse_lisp_iterator(test)
with raises(ValueError):
parse_problem_domain_stmt(iter)
def test_parse_precondition_stmt_fail():
test = ['(:predicates blubb blubb)']
iter = parse_lisp_iterator(test)
with raises(ValueError):
parse_precondition_stmt(iter)
def test_parse_effect_stmt_fail():
test = ['(:predicates blubb blubb)']
iter = parse_lisp_iterator(test)
with raises(ValueError):
parse_effect_stmt(iter)
def test_parse_action_stmt_fail():
test = ['(:predicates blubb blubb)']
iter = parse_lisp_iterator(test)
with raises(ValueError):
parse_action_stmt(iter)
def test_parse_predicates_stmt_fail():
test = ['(:actions blubb blubb)']
iter = parse_lisp_iterator(test)
with raises(ValueError):
parse_predicates_stmt(iter)
def test_parse_domain_def_fail():
test = ['(definiere (domain BLOCKS))']
iter = parse_lisp_iterator(test)
with raises(ValueError):
parse_domain_def(iter)
def test_parse_problem_def_fail():
test = ['(definiere problem)']
iter = parse_lisp_iterator(test)
with raises(ValueError):
parse_problem_def(iter)
def test_parse_problem_name_fail():
test = ['(domain test)']
iter = parse_lisp_iterator(test)
with raises(ValueError):
parse_problem_name(iter)
def test_parse_init_stmt_fail():
test = ['(:goal ssdfsdf)']
iter = parse_lisp_iterator(test)
with raises(ValueError):
parse_init_stmt(iter)
def test_parse_goal_stmt_fail():
test = ['(:init ssdfsdf)']
iter = parse_lisp_iterator(test)
with raises(ValueError):
parse_goal_stmt(iter)
#
# Chris Lumens <[email protected]>
#
# Copyright 2009 Red Hat, Inc.
#
# This copyrighted material is made available to anyone wishing to use, modify,
# copy, or redistribute it subject to the terms and conditions of the GNU
# General Public License v.2. This program is distributed in the hope that it
# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the
# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc., 51
# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat
# trademarks that are incorporated in the source code or documentation are not
# subject to the GNU General Public License and may only be used or replicated
# with the express permission of Red Hat, Inc.
#
import unittest
from tests.baseclass import CommandTest, CommandSequenceTest
from pykickstart.commands.autopart import FC3_AutoPart, RHEL6_AutoPart, F16_AutoPart, F17_AutoPart, F18_AutoPart, F21_AutoPart
from pykickstart.version import RHEL6, RHEL7, F21, F23
from pykickstart.constants import AUTOPART_TYPE_PLAIN
class AutoPart_TestCase(unittest.TestCase):
def runTest(self):
for cmd_class in [FC3_AutoPart, F16_AutoPart, F17_AutoPart, F18_AutoPart, F21_AutoPart]:
cmd = cmd_class()
self.assertEqual(cmd.__str__(), '')
# this is very artificial but covers the following snippet
# which never executes during normal operation
# because self.typeMap['plain'] will match first
# 263 if retval == "partition":
# 264 retval = "plain"
cmd = F17_AutoPart()
del cmd.typeMap['plain']
cmd.type = AUTOPART_TYPE_PLAIN
self.assertEqual(cmd._typeAsStr(), 'plain')
class FC3_TestCase(CommandTest):
command = "autopart"
def runTest(self):
# pass
self.assert_parse("autopart", "autopart\n")
# fail - on FC3, autopart took no options so this raises a different
# exception than later releases.
if self.__class__.__name__ == "FC3_TestCase":
self.assert_parse_error("autopart --blah")
class F9_TestCase(FC3_TestCase):
def runTest(self):
FC3_TestCase.runTest(self)
# pass
self.assert_parse("autopart --passphrase=whatever", "autopart\n")
self.assert_parse("autopart --encrypted", "autopart --encrypted\n")
self.assert_parse("autopart --encrypted --passphrase=\"whatever\"",
"autopart --encrypted --passphrase=\"whatever\"\n")
self.assert_parse("autopart --encrypted --passphrase=whatever",
"autopart --encrypted --passphrase=\"whatever\"\n")
# fail
self.assert_parse_error("autopart --passphrase")
self.assert_parse_error("autopart --encrypted --passphrase")
self.assert_parse_error("autopart --encrypted=False")
self.assert_parse_error("autopart --encrypted=True")
class F12_TestCase(F9_TestCase):
def runTest(self):
# Run F9 test case
F9_TestCase.runTest(self)
# pass
self.assert_parse("autopart --escrowcert=\"http://x/y\"", "autopart\n")
self.assert_parse("autopart --encrypted --backuppassphrase",
"autopart --encrypted\n")
self.assert_parse("autopart --encrypted --escrowcert=\"http://x/y\"",
"autopart --encrypted --escrowcert=\"http://x/y\"\n")
self.assert_parse("autopart --encrypted --escrowcert=\"http://x/y\" "
"--backuppassphrase",
"autopart --encrypted --escrowcert=\"http://x/y\" "
"--backuppassphrase\n")
self.assert_parse("autopart --encrypted --escrowcert=http://x/y",
"autopart --encrypted --escrowcert=\"http://x/y\"\n")
# fail
self.assert_parse_error("autopart --escrowcert")
self.assert_parse_error("autopart --escrowcert --backuppassphrase")
self.assert_parse_error("autopart --encrypted --escrowcert "
"--backuppassphrase")
self.assert_parse_error("autopart --backuppassphrase=False")
self.assert_parse_error("autopart --backuppassphrase=True")
class RHEL6_TestCase(F12_TestCase):
def runTest(self):
F12_TestCase.runTest(self)
# pass
self.assert_parse("autopart --cipher=foo", "autopart\n")
self.assert_parse("autopart --encrypted --cipher=3-rot13",
"autopart --encrypted --cipher=\"3-rot13\"\n")
# fail
self.assert_parse_error("autopart --cipher")
self.assert_parse_error("autopart --encrypted --cipher")
# extra test coverage
cmd = RHEL6_AutoPart()
self.assertEqual(cmd.__str__(), '')
class RHEL6_Conflict_TestCase(CommandSequenceTest):
def __init__(self, *args, **kwargs):
CommandSequenceTest.__init__(self, *args, **kwargs)
self.version = RHEL6
def runTest(self):
self.assert_parse_error("""
part / --size=1024 --fstype=ext4
autopart""")
self.assert_parse_error("""
raid / --device=md0 --level=0 raid.01
autopart""")
self.assert_parse_error("""
volgroup vg.01 pv.01 --pesize=70000
autopart""")
self.assert_parse_error("""
logvol / --size=10240 --name=NAME --vgname=VGNAM
autopart""")
class F16_TestCase(F12_TestCase):
def runTest(self):
# Run F12 test case
F12_TestCase.runTest(self)
if "--type" not in self.optionList:
# pass
self.assert_parse("autopart --nolvm",
"autopart --nolvm\n")
# fail
self.assert_parse_error("autopart --nolvm=asdf")
self.assert_parse_error("autopart --nolvm True")
self.assert_parse_error("autopart --nolvm=1")
self.assert_parse_error("autopart --nolvm 0")
class F17_TestCase(F16_TestCase):
def runTest(self):
# Run F16 test case
F16_TestCase.runTest(self)
# pass
self.assert_parse("autopart --type=plain",
"autopart --type=plain\n")
self.assert_parse("autopart --type=partition",
"autopart --type=plain\n")
self.assert_parse("autopart --type=lvm",
"autopart --type=lvm\n")
if self.__class__.__name__ != "RHEL8_TestCase":
self.assert_parse("autopart --type=btrfs",
"autopart --type=btrfs\n")
self.assert_parse("autopart --nolvm",
"autopart --type=plain\n")
# don't add --type= if none was specified
self.assert_parse("autopart",
"autopart\n")
# fail
self.assert_parse_error("autopart --type")
self.assert_parse_error("autopart --type=blah")
class F18_TestCase(F17_TestCase):
def runTest(self):
F17_TestCase.runTest(self)
# pass
self.assert_parse("autopart --cipher=foo", "autopart\n")
self.assert_parse("autopart --encrypted --cipher=3-rot13",
"autopart --encrypted --cipher=\"3-rot13\"\n")
# fail
self.assert_parse_error("autopart --cipher")
self.assert_parse_error("autopart --encrypted --cipher")
class F20_TestCase(F18_TestCase):
def runTest(self):
F18_TestCase.runTest(self)
self.assert_parse("autopart --type=thinp",
"autopart --type=thinp\n")
class F21_TestCase(F20_TestCase):
def runTest(self):
F20_TestCase.runTest(self)
# pass
self.assert_parse("autopart --fstype=ext4",
'autopart --fstype=ext4\n')
self.assert_parse("autopart --encrypted --fstype=ext4",
'autopart --encrypted --fstype=ext4\n')
self.assert_parse("autopart --type=lvm --fstype=xfs",
"autopart --type=lvm --fstype=xfs\n")
# fail
self.assert_parse_error("autopart --fstype")
self.assert_parse_error("autopart --fstype=btrfs")
self.assert_parse_error("autopart --type=btrfs --fstype=xfs")
class F21_Conflict_TestCase(CommandSequenceTest):
def __init__(self, *args, **kwargs):
CommandSequenceTest.__init__(self, *args, **kwargs)
self.version = F21
def runTest(self):
self.assert_parse_error("""
part / --size=1024 --fstype=ext4
autopart""")
self.assert_parse_error("""
raid / --device=md0 --level=0 raid.01
autopart""")
self.assert_parse_error("""
volgroup vg.01 pv.01 --pesize=70000
autopart""")
self.assert_parse_error("""
logvol / --size=10240 --name=NAME --vgname=VGNAM
autopart""")
class F23_TestCase(F21_TestCase):
def runTest(self):
F21_TestCase.runTest(self)
class F23_Conflict_TestCase(F21_Conflict_TestCase):
"""
reqpart was added in Fedora 23 but the autopart handler
wasn't updated. Instead the changes were introduced into
F20_AutoPart, which wasn't the best thing to do.
"""
def __init__(self, *args, **kwargs):
F21_Conflict_TestCase.__init__(self, *args, **kwargs)
self.version = F23
def runTest(self):
F21_Conflict_TestCase.runTest(self)
self.assert_parse_error("""
reqpart
autopart""")
class RHEL7_TestCase(F21_TestCase):
def runTest(self):
F21_TestCase.runTest(self)
# pass
self.assert_parse("autopart --nohome",
"autopart --nohome\n")
# fail
self.assert_parse_error("autopart --nohome=xxx")
self.assert_parse_error("autopart --nohome True")
self.assert_parse_error("autopart --nohome=1")
self.assert_parse_error("autopart --nohome 0")
class RHEL7_Conflict_TestCase(CommandSequenceTest):
def __init__(self, *args, **kwargs):
CommandSequenceTest.__init__(self, *args, **kwargs)
self.version = RHEL7
def runTest(self):
self.assert_parse_error("""
reqpart
autopart""")
class F26_TestCase(F23_TestCase):
def runTest(self):
F23_TestCase.runTest(self)
# pass
self.assert_parse("autopart --nohome",
'autopart --nohome\n')
self.assert_parse("autopart --noboot",
'autopart --noboot\n')
self.assert_parse("autopart --noswap",
'autopart --noswap\n')
self.assert_parse("autopart --nohome --noboot --noswap",
'autopart --nohome --noboot --noswap\n')
# fail
self.assert_parse_error("autopart --nohome=xxx")
self.assert_parse_error("autopart --nohome True")
self.assert_parse_error("autopart --nohome=1")
self.assert_parse_error("autopart --nohome 0")
self.assert_parse_error("autopart --noboot=xxx")
self.assert_parse_error("autopart --noboot True")
self.assert_parse_error("autopart --noboot=1")
self.assert_parse_error("autopart --noboot 0")
self.assert_parse_error("autopart --noswap=xxx")
self.assert_parse_error("autopart --noswap True")
self.assert_parse_error("autopart --noswap=1")
self.assert_parse_error("autopart --noswap 0")
class F26_Conflict_TestCase(F23_Conflict_TestCase):
def runTest(self):
F23_Conflict_TestCase.runTest(self)
class F29_TestCase(F26_TestCase):
def runTest(self):
F26_TestCase.runTest(self)
self.assert_parse("autopart --encrypted --luks-version=luks2",
"autopart --encrypted --luks-version=luks2\n")
self.assert_parse("autopart --encrypted --pbkdf=argon2i",
"autopart --encrypted --pbkdf=argon2i\n")
self.assert_parse("autopart --encrypted --pbkdf-memory=256",
"autopart --encrypted --pbkdf-memory=256\n")
self.assert_parse("autopart --encrypted --pbkdf-time=100",
"autopart --encrypted --pbkdf-time=100\n")
self.assert_parse("autopart --encrypted --pbkdf-iterations=1000",
"autopart --encrypted --pbkdf-iterations=1000\n")
self.assert_parse_error("autopart --encrypted --pbkdf-time=100 --pbkdf-iterations=1000")
class RHEL8_TestCase(F29_TestCase):
def runTest(self):
F29_TestCase.runTest(self)
self.assert_parse_error("autopart --type=btrfs")
if __name__ == "__main__":
unittest.main()
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is Mozilla Communicator client code, released
* March 31, 1998.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
gTestfile = '15.1.2.3-1.js';
/**
File Name: 15.1.2.3.js
ECMA Section: 15.1.2.3 Function properties of the global object:
parseFloat( string )
Description: The parseFloat function produces a number value dictated
by the interpretation of the contents of the string
argument defined as a decimal literal.
When the parseFloat function is called, the following
steps are taken:
1. Call ToString( string ).
2. Remove leading whitespace Result(1).
3. If neither Result(2) nor any prefix of Result(2)
satisfies the syntax of a StrDecimalLiteral,
return NaN.
4. Compute the longest prefix of Result(2) which might
be Resusult(2) itself, that satisfies the syntax of
a StrDecimalLiteral
5. Return the number value for the MV of Result(4).
Note that parseFloate may interpret only a leading
portion of the string as a number value; it ignores any
characters that cannot be interpreted as part of the
notation of a decimal literal, and no indication is given
that such characters were ignored.
StrDecimalLiteral::
Infinity
DecimalDigits.DecimalDigits opt ExponentPart opt
.DecimalDigits ExponentPart opt
DecimalDigits ExponentPart opt
Author: christine@netscape.com
Date: 28 october 1997
*/
var SECTION = "15.1.2.3-1";
var VERSION = "ECMA_1";
var TITLE = "parseFloat(string)";
var BUGNUMBER="none";
startTest();
writeHeaderToLog( SECTION + " "+ TITLE);
new TestCase( SECTION, "parseFloat.length", 1, parseFloat.length );
new TestCase( SECTION, "parseFloat.length = null; parseFloat.length", 1, eval("parseFloat.length = null; parseFloat.length") );
new TestCase( SECTION, "delete parseFloat.length", false, delete parseFloat.length );
new TestCase( SECTION, "delete parseFloat.length; parseFloat.length", 1, eval("delete parseFloat.length; parseFloat.length") );
new TestCase( SECTION, "var MYPROPS=''; for ( var p in parseFloat ) { MYPROPS += p }; MYPROPS", "prototype", eval("var MYPROPS=''; for ( var p in parseFloat ) { MYPROPS += p }; MYPROPS") );
new TestCase( SECTION, "parseFloat()", Number.NaN, parseFloat() );
new TestCase( SECTION, "parseFloat('')", Number.NaN, parseFloat('') );
new TestCase( SECTION, "parseFloat(' ')", Number.NaN, parseFloat(' ') );
new TestCase( SECTION, "parseFloat(true)", Number.NaN, parseFloat(true) );
new TestCase( SECTION, "parseFloat(false)", Number.NaN, parseFloat(false) );
new TestCase( SECTION, "parseFloat('string')", Number.NaN, parseFloat("string") );
new TestCase( SECTION, "parseFloat(' Infinity')", Infinity, parseFloat("Infinity") );
new TestCase( SECTION, "parseFloat(' Infinity ')", Infinity, parseFloat(' Infinity ') );
new TestCase( SECTION, "parseFloat('Infinity')", Infinity, parseFloat("Infinity") );
new TestCase( SECTION, "parseFloat(Infinity)", Infinity, parseFloat(Infinity) );
new TestCase( SECTION, "parseFloat(' +Infinity')", +Infinity, parseFloat("+Infinity") );
new TestCase( SECTION, "parseFloat(' -Infinity ')", -Infinity, parseFloat(' -Infinity ') );
new TestCase( SECTION, "parseFloat('+Infinity')", +Infinity, parseFloat("+Infinity") );
new TestCase( SECTION, "parseFloat(-Infinity)", -Infinity, parseFloat(-Infinity) );
new TestCase( SECTION, "parseFloat('0')", 0, parseFloat("0") );
new TestCase( SECTION, "parseFloat('-0')", -0, parseFloat("-0") );
new TestCase( SECTION, "parseFloat('+0')", 0, parseFloat("+0") );
new TestCase( SECTION, "parseFloat('1')", 1, parseFloat("1") );
new TestCase( SECTION, "parseFloat('-1')", -1, parseFloat("-1") );
new TestCase( SECTION, "parseFloat('+1')", 1, parseFloat("+1") );
new TestCase( SECTION, "parseFloat('2')", 2, parseFloat("2") );
new TestCase( SECTION, "parseFloat('-2')", -2, parseFloat("-2") );
new TestCase( SECTION, "parseFloat('+2')", 2, parseFloat("+2") );
new TestCase( SECTION, "parseFloat('3')", 3, parseFloat("3") );
new TestCase( SECTION, "parseFloat('-3')", -3, parseFloat("-3") );
new TestCase( SECTION, "parseFloat('+3')", 3, parseFloat("+3") );
new TestCase( SECTION, "parseFloat('4')", 4, parseFloat("4") );
new TestCase( SECTION, "parseFloat('-4')", -4, parseFloat("-4") );
new TestCase( SECTION, "parseFloat('+4')", 4, parseFloat("+4") );
new TestCase( SECTION, "parseFloat('5')", 5, parseFloat("5") );
new TestCase( SECTION, "parseFloat('-5')", -5, parseFloat("-5") );
new TestCase( SECTION, "parseFloat('+5')", 5, parseFloat("+5") );
new TestCase( SECTION, "parseFloat('6')", 6, parseFloat("6") );
new TestCase( SECTION, "parseFloat('-6')", -6, parseFloat("-6") );
new TestCase( SECTION, "parseFloat('+6')", 6, parseFloat("+6") );
new TestCase( SECTION, "parseFloat('7')", 7, parseFloat("7") );
new TestCase( SECTION, "parseFloat('-7')", -7, parseFloat("-7") );
new TestCase( SECTION, "parseFloat('+7')", 7, parseFloat("+7") );
new TestCase( SECTION, "parseFloat('8')", 8, parseFloat("8") );
new TestCase( SECTION, "parseFloat('-8')", -8, parseFloat("-8") );
new TestCase( SECTION, "parseFloat('+8')", 8, parseFloat("+8") );
new TestCase( SECTION, "parseFloat('9')", 9, parseFloat("9") );
new TestCase( SECTION, "parseFloat('-9')", -9, parseFloat("-9") );
new TestCase( SECTION, "parseFloat('+9')", 9, parseFloat("+9") );
new TestCase( SECTION, "parseFloat('3.14159')", 3.14159, parseFloat("3.14159") );
new TestCase( SECTION, "parseFloat('-3.14159')", -3.14159, parseFloat("-3.14159") );
new TestCase( SECTION, "parseFloat('+3.14159')", 3.14159, parseFloat("+3.14159") );
new TestCase( SECTION, "parseFloat('3.')", 3, parseFloat("3.") );
new TestCase( SECTION, "parseFloat('-3.')", -3, parseFloat("-3.") );
new TestCase( SECTION, "parseFloat('+3.')", 3, parseFloat("+3.") );
new TestCase( SECTION, "parseFloat('3.e1')", 30, parseFloat("3.e1") );
new TestCase( SECTION, "parseFloat('-3.e1')", -30, parseFloat("-3.e1") );
new TestCase( SECTION, "parseFloat('+3.e1')", 30, parseFloat("+3.e1") );
new TestCase( SECTION, "parseFloat('3.e+1')", 30, parseFloat("3.e+1") );
new TestCase( SECTION, "parseFloat('-3.e+1')", -30, parseFloat("-3.e+1") );
new TestCase( SECTION, "parseFloat('+3.e+1')", 30, parseFloat("+3.e+1") );
new TestCase( SECTION, "parseFloat('3.e-1')", .30, parseFloat("3.e-1") );
new TestCase( SECTION, "parseFloat('-3.e-1')", -.30, parseFloat("-3.e-1") );
new TestCase( SECTION, "parseFloat('+3.e-1')", .30, parseFloat("+3.e-1") );
// StrDecimalLiteral::: .DecimalDigits ExponentPart opt
new TestCase( SECTION, "parseFloat('.00001')", 0.00001, parseFloat(".00001") );
new TestCase( SECTION, "parseFloat('+.00001')", 0.00001, parseFloat("+.00001") );
new TestCase( SECTION, "parseFloat('-0.0001')", -0.00001, parseFloat("-.00001") );
new TestCase( SECTION, "parseFloat('.01e2')", 1, parseFloat(".01e2") );
new TestCase( SECTION, "parseFloat('+.01e2')", 1, parseFloat("+.01e2") );
new TestCase( SECTION, "parseFloat('-.01e2')", -1, parseFloat("-.01e2") );
new TestCase( SECTION, "parseFloat('.01e+2')", 1, parseFloat(".01e+2") );
new TestCase( SECTION, "parseFloat('+.01e+2')", 1, parseFloat("+.01e+2") );
new TestCase( SECTION, "parseFloat('-.01e+2')", -1, parseFloat("-.01e+2") );
new TestCase( SECTION, "parseFloat('.01e-2')", 0.0001, parseFloat(".01e-2") );
new TestCase( SECTION, "parseFloat('+.01e-2')", 0.0001, parseFloat("+.01e-2") );
new TestCase( SECTION, "parseFloat('-.01e-2')", -0.0001, parseFloat("-.01e-2") );
// StrDecimalLiteral::: DecimalDigits ExponentPart opt
new TestCase( SECTION, "parseFloat('1234e5')", 123400000, parseFloat("1234e5") );
new TestCase( SECTION, "parseFloat('+1234e5')", 123400000, parseFloat("+1234e5") );
new TestCase( SECTION, "parseFloat('-1234e5')", -123400000, parseFloat("-1234e5") );
new TestCase( SECTION, "parseFloat('1234e+5')", 123400000, parseFloat("1234e+5") );
new TestCase( SECTION, "parseFloat('+1234e+5')", 123400000, parseFloat("+1234e+5") );
new TestCase( SECTION, "parseFloat('-1234e+5')", -123400000, parseFloat("-1234e+5") );
new TestCase( SECTION, "parseFloat('1234e-5')", 0.01234, parseFloat("1234e-5") );
new TestCase( SECTION, "parseFloat('+1234e-5')", 0.01234, parseFloat("+1234e-5") );
new TestCase( SECTION, "parseFloat('-1234e-5')", -0.01234, parseFloat("-1234e-5") );
new TestCase( SECTION, "parseFloat(0)", 0, parseFloat(0) );
new TestCase( SECTION, "parseFloat(-0)", -0, parseFloat(-0) );
new TestCase( SECTION, "parseFloat(1)", 1, parseFloat(1) );
new TestCase( SECTION, "parseFloat(-1)", -1, parseFloat(-1) );
new TestCase( SECTION, "parseFloat(2)", 2, parseFloat(2) );
new TestCase( SECTION, "parseFloat(-2)", -2, parseFloat(-2) );
new TestCase( SECTION, "parseFloat(3)", 3, parseFloat(3) );
new TestCase( SECTION, "parseFloat(-3)", -3, parseFloat(-3) );
new TestCase( SECTION, "parseFloat(4)", 4, parseFloat(4) );
new TestCase( SECTION, "parseFloat(-4)", -4, parseFloat(-4) );
new TestCase( SECTION, "parseFloat(5)", 5, parseFloat(5) );
new TestCase( SECTION, "parseFloat(-5)", -5, parseFloat(-5) );
new TestCase( SECTION, "parseFloat(6)", 6, parseFloat(6) );
new TestCase( SECTION, "parseFloat(-6)", -6, parseFloat(-6) );
new TestCase( SECTION, "parseFloat(7)", 7, parseFloat(7) );
new TestCase( SECTION, "parseFloat(-7)", -7, parseFloat(-7) );
new TestCase( SECTION, "parseFloat(8)", 8, parseFloat(8) );
new TestCase( SECTION, "parseFloat(-8)", -8, parseFloat(-8) );
new TestCase( SECTION, "parseFloat(9)", 9, parseFloat(9) );
new TestCase( SECTION, "parseFloat(-9)", -9, parseFloat(-9) );
new TestCase( SECTION, "parseFloat(3.14159)", 3.14159, parseFloat(3.14159) );
new TestCase( SECTION, "parseFloat(-3.14159)", -3.14159, parseFloat(-3.14159) );
new TestCase( SECTION, "parseFloat(3.)", 3, parseFloat(3.) );
new TestCase( SECTION, "parseFloat(-3.)", -3, parseFloat(-3.) );
new TestCase( SECTION, "parseFloat(3.e1)", 30, parseFloat(3.e1) );
new TestCase( SECTION, "parseFloat(-3.e1)", -30, parseFloat(-3.e1) );
new TestCase( SECTION, "parseFloat(3.e+1)", 30, parseFloat(3.e+1) );
new TestCase( SECTION, "parseFloat(-3.e+1)", -30, parseFloat(-3.e+1) );
new TestCase( SECTION, "parseFloat(3.e-1)", .30, parseFloat(3.e-1) );
new TestCase( SECTION, "parseFloat(-3.e-1)", -.30, parseFloat(-3.e-1) );
new TestCase( SECTION, "parseFloat(3.E1)", 30, parseFloat(3.E1) );
new TestCase( SECTION, "parseFloat(-3.E1)", -30, parseFloat(-3.E1) );
new TestCase( SECTION, "parseFloat(3.E+1)", 30, parseFloat(3.E+1) );
new TestCase( SECTION, "parseFloat(-3.E+1)", -30, parseFloat(-3.E+1) );
new TestCase( SECTION, "parseFloat(3.E-1)", .30, parseFloat(3.E-1) );
new TestCase( SECTION, "parseFloat(-3.E-1)", -.30, parseFloat(-3.E-1) );
// StrDecimalLiteral::: .DecimalDigits ExponentPart opt
new TestCase( SECTION, "parseFloat(.00001)", 0.00001, parseFloat(.00001) );
new TestCase( SECTION, "parseFloat(-0.0001)", -0.00001, parseFloat(-.00001) );
new TestCase( SECTION, "parseFloat(.01e2)", 1, parseFloat(.01e2) );
new TestCase( SECTION, "parseFloat(-.01e2)", -1, parseFloat(-.01e2) );
new TestCase( SECTION, "parseFloat(.01e+2)", 1, parseFloat(.01e+2) );
new TestCase( SECTION, "parseFloat(-.01e+2)", -1, parseFloat(-.01e+2) );
new TestCase( SECTION, "parseFloat(.01e-2)", 0.0001, parseFloat(.01e-2) );
new TestCase( SECTION, "parseFloat(-.01e-2)", -0.0001, parseFloat(-.01e-2) );
// StrDecimalLiteral::: DecimalDigits ExponentPart opt
new TestCase( SECTION, "parseFloat(1234e5)", 123400000, parseFloat(1234e5) );
new TestCase( SECTION, "parseFloat(-1234e5)", -123400000, parseFloat(-1234e5) );
new TestCase( SECTION, "parseFloat(1234e+5)", 123400000, parseFloat(1234e+5) );
new TestCase( SECTION, "parseFloat(-1234e+5)", -123400000, parseFloat(-1234e+5) );
new TestCase( SECTION, "parseFloat(1234e-5)", 0.01234, parseFloat(1234e-5) );
new TestCase( SECTION, "parseFloat(-1234e-5)", -0.01234, parseFloat(-1234e-5) );
// hex cases should all return 0 (0 is the longest string that satisfies a StringDecimalLiteral)
new TestCase( SECTION, "parseFloat('0x0')", 0, parseFloat("0x0"));
new TestCase( SECTION, "parseFloat('0x1')", 0, parseFloat("0x1"));
new TestCase( SECTION, "parseFloat('0x2')", 0, parseFloat("0x2"));
new TestCase( SECTION, "parseFloat('0x3')", 0, parseFloat("0x3"));
new TestCase( SECTION, "parseFloat('0x4')", 0, parseFloat("0x4"));
new TestCase( SECTION, "parseFloat('0x5')", 0, parseFloat("0x5"));
new TestCase( SECTION, "parseFloat('0x6')", 0, parseFloat("0x6"));
new TestCase( SECTION, "parseFloat('0x7')", 0, parseFloat("0x7"));
new TestCase( SECTION, "parseFloat('0x8')", 0, parseFloat("0x8"));
new TestCase( SECTION, "parseFloat('0x9')", 0, parseFloat("0x9"));
new TestCase( SECTION, "parseFloat('0xa')", 0, parseFloat("0xa"));
new TestCase( SECTION, "parseFloat('0xb')", 0, parseFloat("0xb"));
new TestCase( SECTION, "parseFloat('0xc')", 0, parseFloat("0xc"));
new TestCase( SECTION, "parseFloat('0xd')", 0, parseFloat("0xd"));
new TestCase( SECTION, "parseFloat('0xe')", 0, parseFloat("0xe"));
new TestCase( SECTION, "parseFloat('0xf')", 0, parseFloat("0xf"));
new TestCase( SECTION, "parseFloat('0xA')", 0, parseFloat("0xA"));
new TestCase( SECTION, "parseFloat('0xB')", 0, parseFloat("0xB"));
new TestCase( SECTION, "parseFloat('0xC')", 0, parseFloat("0xC"));
new TestCase( SECTION, "parseFloat('0xD')", 0, parseFloat("0xD"));
new TestCase( SECTION, "parseFloat('0xE')", 0, parseFloat("0xE"));
new TestCase( SECTION, "parseFloat('0xF')", 0, parseFloat("0xF"));
new TestCase( SECTION, "parseFloat('0X0')", 0, parseFloat("0X0"));
new TestCase( SECTION, "parseFloat('0X1')", 0, parseFloat("0X1"));
new TestCase( SECTION, "parseFloat('0X2')", 0, parseFloat("0X2"));
new TestCase( SECTION, "parseFloat('0X3')", 0, parseFloat("0X3"));
new TestCase( SECTION, "parseFloat('0X4')", 0, parseFloat("0X4"));
new TestCase( SECTION, "parseFloat('0X5')", 0, parseFloat("0X5"));
new TestCase( SECTION, "parseFloat('0X6')", 0, parseFloat("0X6"));
new TestCase( SECTION, "parseFloat('0X7')", 0, parseFloat("0X7"));
new TestCase( SECTION, "parseFloat('0X8')", 0, parseFloat("0X8"));
new TestCase( SECTION, "parseFloat('0X9')", 0, parseFloat("0X9"));
new TestCase( SECTION, "parseFloat('0Xa')", 0, parseFloat("0Xa"));
new TestCase( SECTION, "parseFloat('0Xb')", 0, parseFloat("0Xb"));
new TestCase( SECTION, "parseFloat('0Xc')", 0, parseFloat("0Xc"));
new TestCase( SECTION, "parseFloat('0Xd')", 0, parseFloat("0Xd"));
new TestCase( SECTION, "parseFloat('0Xe')", 0, parseFloat("0Xe"));
new TestCase( SECTION, "parseFloat('0Xf')", 0, parseFloat("0Xf"));
new TestCase( SECTION, "parseFloat('0XA')", 0, parseFloat("0XA"));
new TestCase( SECTION, "parseFloat('0XB')", 0, parseFloat("0XB"));
new TestCase( SECTION, "parseFloat('0XC')", 0, parseFloat("0XC"));
new TestCase( SECTION, "parseFloat('0XD')", 0, parseFloat("0XD"));
new TestCase( SECTION, "parseFloat('0XE')", 0, parseFloat("0XE"));
new TestCase( SECTION, "parseFloat('0XF')", 0, parseFloat("0XF"));
new TestCase( SECTION, "parseFloat(' 0XF ')", 0, parseFloat(" 0XF "));
// hex literals should still succeed
new TestCase( SECTION, "parseFloat(0x0)", 0, parseFloat(0x0));
new TestCase( SECTION, "parseFloat(0x1)", 1, parseFloat(0x1));
new TestCase( SECTION, "parseFloat(0x2)", 2, parseFloat(0x2));
new TestCase( SECTION, "parseFloat(0x3)", 3, parseFloat(0x3));
new TestCase( SECTION, "parseFloat(0x4)", 4, parseFloat(0x4));
new TestCase( SECTION, "parseFloat(0x5)", 5, parseFloat(0x5));
new TestCase( SECTION, "parseFloat(0x6)", 6, parseFloat(0x6));
new TestCase( SECTION, "parseFloat(0x7)", 7, parseFloat(0x7));
new TestCase( SECTION, "parseFloat(0x8)", 8, parseFloat(0x8));
new TestCase( SECTION, "parseFloat(0x9)", 9, parseFloat(0x9));
new TestCase( SECTION, "parseFloat(0xa)", 10, parseFloat(0xa));
new TestCase( SECTION, "parseFloat(0xb)", 11, parseFloat(0xb));
new TestCase( SECTION, "parseFloat(0xc)", 12, parseFloat(0xc));
new TestCase( SECTION, "parseFloat(0xd)", 13, parseFloat(0xd));
new TestCase( SECTION, "parseFloat(0xe)", 14, parseFloat(0xe));
new TestCase( SECTION, "parseFloat(0xf)", 15, parseFloat(0xf));
new TestCase( SECTION, "parseFloat(0xA)", 10, parseFloat(0xA));
new TestCase( SECTION, "parseFloat(0xB)", 11, parseFloat(0xB));
new TestCase( SECTION, "parseFloat(0xC)", 12, parseFloat(0xC));
new TestCase( SECTION, "parseFloat(0xD)", 13, parseFloat(0xD));
new TestCase( SECTION, "parseFloat(0xE)", 14, parseFloat(0xE));
new TestCase( SECTION, "parseFloat(0xF)", 15, parseFloat(0xF));
new TestCase( SECTION, "parseFloat(0X0)", 0, parseFloat(0X0));
new TestCase( SECTION, "parseFloat(0X1)", 1, parseFloat(0X1));
new TestCase( SECTION, "parseFloat(0X2)", 2, parseFloat(0X2));
new TestCase( SECTION, "parseFloat(0X3)", 3, parseFloat(0X3));
new TestCase( SECTION, "parseFloat(0X4)", 4, parseFloat(0X4));
new TestCase( SECTION, "parseFloat(0X5)", 5, parseFloat(0X5));
new TestCase( SECTION, "parseFloat(0X6)", 6, parseFloat(0X6));
new TestCase( SECTION, "parseFloat(0X7)", 7, parseFloat(0X7));
new TestCase( SECTION, "parseFloat(0X8)", 8, parseFloat(0X8));
new TestCase( SECTION, "parseFloat(0X9)", 9, parseFloat(0X9));
new TestCase( SECTION, "parseFloat(0Xa)", 10, parseFloat(0Xa));
new TestCase( SECTION, "parseFloat(0Xb)", 11, parseFloat(0Xb));
new TestCase( SECTION, "parseFloat(0Xc)", 12, parseFloat(0Xc));
new TestCase( SECTION, "parseFloat(0Xd)", 13, parseFloat(0Xd));
new TestCase( SECTION, "parseFloat(0Xe)", 14, parseFloat(0Xe));
new TestCase( SECTION, "parseFloat(0Xf)", 15, parseFloat(0Xf));
new TestCase( SECTION, "parseFloat(0XA)", 10, parseFloat(0XA));
new TestCase( SECTION, "parseFloat(0XB)", 11, parseFloat(0XB));
new TestCase( SECTION, "parseFloat(0XC)", 12, parseFloat(0XC));
new TestCase( SECTION, "parseFloat(0XD)", 13, parseFloat(0XD));
new TestCase( SECTION, "parseFloat(0XE)", 14, parseFloat(0XE));
new TestCase( SECTION, "parseFloat(0XF)", 15, parseFloat(0XF));
// A StringNumericLiteral may not use octal notation
new TestCase( SECTION, "parseFloat('00')", 0, parseFloat("00"));
new TestCase( SECTION, "parseFloat('01')", 1, parseFloat("01"));
new TestCase( SECTION, "parseFloat('02')", 2, parseFloat("02"));
new TestCase( SECTION, "parseFloat('03')", 3, parseFloat("03"));
new TestCase( SECTION, "parseFloat('04')", 4, parseFloat("04"));
new TestCase( SECTION, "parseFloat('05')", 5, parseFloat("05"));
new TestCase( SECTION, "parseFloat('06')", 6, parseFloat("06"));
new TestCase( SECTION, "parseFloat('07')", 7, parseFloat("07"));
new TestCase( SECTION, "parseFloat('010')", 10, parseFloat("010"));
new TestCase( SECTION, "parseFloat('011')", 11, parseFloat("011"));
// A StringNumericLIteral may have any number of leading 0 digits
new TestCase( SECTION, "parseFloat('001')", 1, parseFloat("001"));
new TestCase( SECTION, "parseFloat('0001')", 1, parseFloat("0001"));
new TestCase( SECTION, "parseFloat(' 0001 ')", 1, parseFloat(" 0001 "));
// an octal numeric literal should be treated as an octal
new TestCase( SECTION, "parseFloat(00)", 0, parseFloat(00));
new TestCase( SECTION, "parseFloat(01)", 1, parseFloat(01));
new TestCase( SECTION, "parseFloat(02)", 2, parseFloat(02));
new TestCase( SECTION, "parseFloat(03)", 3, parseFloat(03));
new TestCase( SECTION, "parseFloat(04)", 4, parseFloat(04));
new TestCase( SECTION, "parseFloat(05)", 5, parseFloat(05));
new TestCase( SECTION, "parseFloat(06)", 6, parseFloat(06));
new TestCase( SECTION, "parseFloat(07)", 7, parseFloat(07));
new TestCase( SECTION, "parseFloat(010)", 8, parseFloat(010));
new TestCase( SECTION, "parseFloat(011)", 9, parseFloat(011));
// A StringNumericLIteral may have any number of leading 0 digits
new TestCase( SECTION, "parseFloat(001)", 1, parseFloat(001));
new TestCase( SECTION, "parseFloat(0001)", 1, parseFloat(0001));
// make sure it's reflexive
new TestCase( SECTION, "parseFloat(Math.PI)", Math.PI, parseFloat(Math.PI));
new TestCase( SECTION, "parseFloat(Math.LN2)", Math.LN2, parseFloat(Math.LN2));
new TestCase( SECTION, "parseFloat(Math.LN10)", Math.LN10, parseFloat(Math.LN10));
new TestCase( SECTION, "parseFloat(Math.LOG2E)", Math.LOG2E, parseFloat(Math.LOG2E));
new TestCase( SECTION, "parseFloat(Math.LOG10E)", Math.LOG10E, parseFloat(Math.LOG10E));
new TestCase( SECTION, "parseFloat(Math.SQRT2)", Math.SQRT2, parseFloat(Math.SQRT2));
new TestCase( SECTION, "parseFloat(Math.SQRT1_2)", Math.SQRT1_2, parseFloat(Math.SQRT1_2));
new TestCase( SECTION, "parseFloat(Math.PI+'')", Math.PI, parseFloat(Math.PI+''));
new TestCase( SECTION, "parseFloat(Math.LN2+'')", Math.LN2, parseFloat(Math.LN2+''));
new TestCase( SECTION, "parseFloat(Math.LN10+'')", Math.LN10, parseFloat(Math.LN10+''));
new TestCase( SECTION, "parseFloat(Math.LOG2E+'')", Math.LOG2E, parseFloat(Math.LOG2E+''));
new TestCase( SECTION, "parseFloat(Math.LOG10E+'')", Math.LOG10E, parseFloat(Math.LOG10E+''));
new TestCase( SECTION, "parseFloat(Math.SQRT2+'')", Math.SQRT2, parseFloat(Math.SQRT2+''));
new TestCase( SECTION, "parseFloat(Math.SQRT1_2+'')", Math.SQRT1_2, parseFloat(Math.SQRT1_2+''));
test();
/* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator client code, released March
* 31, 1998.
*
* The Initial Developer of the Original Code is Netscape Communications
* Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*
*/
/**
File Name: 15.1.2.3-2.js
ECMA Section: 15.1.2.3 Function properties of the global object:
parseFloat( string )
Description: The parseFloat function produces a number value dictated
by the interpretation of the contents of the string
argument defined as a decimal literal.
When the parseFloat function is called, the following
steps are taken:
1. Call ToString( string ).
2. Remove leading whitespace Result(1).
3. If neither Result(2) nor any prefix of Result(2)
satisfies the syntax of a StrDecimalLiteral,
return NaN.
4. Compute the longest prefix of Result(2) which might
be Resusult(2) itself, that satisfies the syntax of
a StrDecimalLiteral
5. Return the number value for the MV of Result(4).
Note that parseFloate may interpret only a leading
portion of the string as a number value; it ignores any
characters that cannot be interpreted as part of the
notation of a decimal literal, and no indication is given
that such characters were ignored.
StrDecimalLiteral::
Infinity
DecimalDigits.DecimalDigits opt ExponentPart opt
.DecimalDigits ExponentPart opt
DecimalDigits ExponentPart opt
Author: christine@netscape.com
Date: 28 october 1997
*/
var SECTION = "15.1.2.3-2";
var VERSION = "ECMA_1";
startTest();
var BUGNUMBER = "77391";
var testcases = getTestCases();
writeHeaderToLog( SECTION + " parseFloat(string)");
test();
function getTestCases() {
var array = new Array();
var item = 0;
array[item++] = new TestCase( SECTION, "parseFloat(true)", Number.NaN, parseFloat(true) );
array[item++] = new TestCase( SECTION, "parseFloat(false)", Number.NaN, parseFloat(false) );
array[item++] = new TestCase( SECTION, "parseFloat('string')", Number.NaN, parseFloat("string") );
array[item++] = new TestCase( SECTION, "parseFloat(' Infinity')", Number.POSITIVE_INFINITY, parseFloat("Infinity") );
// array[item++] = new TestCase( SECTION, "parseFloat(Infinity)", Number.POSITIVE_INFINITY, parseFloat(Infinity) );
array[item++] = new TestCase( SECTION, "parseFloat(' 0')", 0, parseFloat(" 0") );
array[item++] = new TestCase( SECTION, "parseFloat(' -0')", -0, parseFloat(" -0") );
array[item++] = new TestCase( SECTION, "parseFloat(' +0')", 0, parseFloat(" +0") );
array[item++] = new TestCase( SECTION, "parseFloat(' 1')", 1, parseFloat(" 1") );
array[item++] = new TestCase( SECTION, "parseFloat(' -1')", -1, parseFloat(" -1") );
array[item++] = new TestCase( SECTION, "parseFloat(' +1')", 1, parseFloat(" +1") );
array[item++] = new TestCase( SECTION, "parseFloat(' 2')", 2, parseFloat(" 2") );
array[item++] = new TestCase( SECTION, "parseFloat(' -2')", -2, parseFloat(" -2") );
array[item++] = new TestCase( SECTION, "parseFloat(' +2')", 2, parseFloat(" +2") );
array[item++] = new TestCase( SECTION, "parseFloat(' 3')", 3, parseFloat(" 3") );
array[item++] = new TestCase( SECTION, "parseFloat(' -3')", -3, parseFloat(" -3") );
array[item++] = new TestCase( SECTION, "parseFloat(' +3')", 3, parseFloat(" +3") );
array[item++] = new TestCase( SECTION, "parseFloat(' 4')", 4, parseFloat(" 4") );
array[item++] = new TestCase( SECTION, "parseFloat(' -4')", -4, parseFloat(" -4") );
array[item++] = new TestCase( SECTION, "parseFloat(' +4')", 4, parseFloat(" +4") );
array[item++] = new TestCase( SECTION, "parseFloat(' 5')", 5, parseFloat(" 5") );
array[item++] = new TestCase( SECTION, "parseFloat(' -5')", -5, parseFloat(" -5") );
array[item++] = new TestCase( SECTION, "parseFloat(' +5')", 5, parseFloat(" +5") );
array[item++] = new TestCase( SECTION, "parseFloat(' 6')", 6, parseFloat(" 6") );
array[item++] = new TestCase( SECTION, "parseFloat(' -6')", -6, parseFloat(" -6") );
array[item++] = new TestCase( SECTION, "parseFloat(' +6')", 6, parseFloat(" +6") );
array[item++] = new TestCase( SECTION, "parseFloat(' 7')", 7, parseFloat(" 7") );
array[item++] = new TestCase( SECTION, "parseFloat(' -7')", -7, parseFloat(" -7") );
array[item++] = new TestCase( SECTION, "parseFloat(' +7')", 7, parseFloat(" +7") );
array[item++] = new TestCase( SECTION, "parseFloat(' 8')", 8, parseFloat(" 8") );
array[item++] = new TestCase( SECTION, "parseFloat(' -8')", -8, parseFloat(" -8") );
array[item++] = new TestCase( SECTION, "parseFloat(' +8')", 8, parseFloat(" +8") );
array[item++] = new TestCase( SECTION, "parseFloat(' 9')", 9, parseFloat(" 9") );
array[item++] = new TestCase( SECTION, "parseFloat(' -9')", -9, parseFloat(" -9") );
array[item++] = new TestCase( SECTION, "parseFloat(' +9')", 9, parseFloat(" +9") );
array[item++] = new TestCase( SECTION, "parseFloat(' 3.14159')", 3.14159, parseFloat(" 3.14159") );
array[item++] = new TestCase( SECTION, "parseFloat(' -3.14159')", -3.14159, parseFloat(" -3.14159") );
array[item++] = new TestCase( SECTION, "parseFloat(' +3.14159')", 3.14159, parseFloat(" +3.14159") );
array[item++] = new TestCase( SECTION, "parseFloat(' 3.')", 3, parseFloat(" 3.") );
array[item++] = new TestCase( SECTION, "parseFloat(' -3.')", -3, parseFloat(" -3.") );
array[item++] = new TestCase( SECTION, "parseFloat(' +3.')", 3, parseFloat(" +3.") );
array[item++] = new TestCase( SECTION, "parseFloat(' 3.e1')", 30, parseFloat(" 3.e1") );
array[item++] = new TestCase( SECTION, "parseFloat(' -3.e1')", -30, parseFloat(" -3.e1") );
array[item++] = new TestCase( SECTION, "parseFloat(' +3.e1')", 30, parseFloat(" +3.e1") );
array[item++] = new TestCase( SECTION, "parseFloat(' 3.e+1')", 30, parseFloat(" 3.e+1") );
array[item++] = new TestCase( SECTION, "parseFloat(' -3.e+1')", -30, parseFloat(" -3.e+1") );
array[item++] = new TestCase( SECTION, "parseFloat(' +3.e+1')", 30, parseFloat(" +3.e+1") );
array[item++] = new TestCase( SECTION, "parseFloat(' 3.e-1')", .30, parseFloat(" 3.e-1") );
array[item++] = new TestCase( SECTION, "parseFloat(' -3.e-1')", -.30, parseFloat(" -3.e-1") );
array[item++] = new TestCase( SECTION, "parseFloat(' +3.e-1')", .30, parseFloat(" +3.e-1") );
// StrDecimalLiteral::: .DecimalDigits ExponentPart opt
array[item++] = new TestCase( SECTION, "parseFloat(' .00001')", 0.00001, parseFloat(" .00001") );
array[item++] = new TestCase( SECTION, "parseFloat(' +.00001')", 0.00001, parseFloat(" +.00001") );
array[item++] = new TestCase( SECTION, "parseFloat(' -0.0001')", -0.00001, parseFloat(" -.00001") );
array[item++] = new TestCase( SECTION, "parseFloat(' .01e2')", 1, parseFloat(" .01e2") );
array[item++] = new TestCase( SECTION, "parseFloat(' +.01e2')", 1, parseFloat(" +.01e2") );
array[item++] = new TestCase( SECTION, "parseFloat(' -.01e2')", -1, parseFloat(" -.01e2") );
array[item++] = new TestCase( SECTION, "parseFloat(' .01e+2')", 1, parseFloat(" .01e+2") );
array[item++] = new TestCase( SECTION, "parseFloat(' +.01e+2')", 1, parseFloat(" +.01e+2") );
array[item++] = new TestCase( SECTION, "parseFloat(' -.01e+2')", -1, parseFloat(" -.01e+2") );
array[item++] = new TestCase( SECTION, "parseFloat(' .01e-2')", 0.0001, parseFloat(" .01e-2") );
array[item++] = new TestCase( SECTION, "parseFloat(' +.01e-2')", 0.0001, parseFloat(" +.01e-2") );
array[item++] = new TestCase( SECTION, "parseFloat(' -.01e-2')", -0.0001, parseFloat(" -.01e-2") );
// StrDecimalLiteral::: DecimalDigits ExponentPart opt
array[item++] = new TestCase( SECTION, "parseFloat(' 1234e5')", 123400000, parseFloat(" 1234e5") );
array[item++] = new TestCase( SECTION, "parseFloat(' +1234e5')", 123400000, parseFloat(" +1234e5") );
array[item++] = new TestCase( SECTION, "parseFloat(' -1234e5')", -123400000, parseFloat(" -1234e5") );
array[item++] = new TestCase( SECTION, "parseFloat(' 1234e+5')", 123400000, parseFloat(" 1234e+5") );
array[item++] = new TestCase( SECTION, "parseFloat(' +1234e+5')", 123400000, parseFloat(" +1234e+5") );
array[item++] = new TestCase( SECTION, "parseFloat(' -1234e+5')", -123400000, parseFloat(" -1234e+5") );
array[item++] = new TestCase( SECTION, "parseFloat(' 1234e-5')", 0.01234, parseFloat(" 1234e-5") );
array[item++] = new TestCase( SECTION, "parseFloat(' +1234e-5')", 0.01234, parseFloat(" +1234e-5") );
array[item++] = new TestCase( SECTION, "parseFloat(' -1234e-5')", -0.01234, parseFloat(" -1234e-5") );
array[item++] = new TestCase( SECTION, "parseFloat(' .01E2')", 1, parseFloat(" .01E2") );
array[item++] = new TestCase( SECTION, "parseFloat(' +.01E2')", 1, parseFloat(" +.01E2") );
array[item++] = new TestCase( SECTION, "parseFloat(' -.01E2')", -1, parseFloat(" -.01E2") );
array[item++] = new TestCase( SECTION, "parseFloat(' .01E+2')", 1, parseFloat(" .01E+2") );
array[item++] = new TestCase( SECTION, "parseFloat(' +.01E+2')", 1, parseFloat(" +.01E+2") );
array[item++] = new TestCase( SECTION, "parseFloat(' -.01E+2')", -1, parseFloat(" -.01E+2") );
array[item++] = new TestCase( SECTION, "parseFloat(' .01E-2')", 0.0001, parseFloat(" .01E-2") );
array[item++] = new TestCase( SECTION, "parseFloat(' +.01E-2')", 0.0001, parseFloat(" +.01E-2") );
array[item++] = new TestCase( SECTION, "parseFloat(' -.01E-2')", -0.0001, parseFloat(" -.01E-2") );
// StrDecimalLiteral::: DecimalDigits ExponentPart opt
array[item++] = new TestCase( SECTION, "parseFloat(' 1234E5')", 123400000, parseFloat(" 1234E5") );
array[item++] = new TestCase( SECTION, "parseFloat(' +1234E5')", 123400000, parseFloat(" +1234E5") );
array[item++] = new TestCase( SECTION, "parseFloat(' -1234E5')", -123400000, parseFloat(" -1234E5") );
array[item++] = new TestCase( SECTION, "parseFloat(' 1234E+5')", 123400000, parseFloat(" 1234E+5") );
array[item++] = new TestCase( SECTION, "parseFloat(' +1234E+5')", 123400000, parseFloat(" +1234E+5") );
array[item++] = new TestCase( SECTION, "parseFloat(' -1234E+5')", -123400000, parseFloat(" -1234E+5") );
array[item++] = new TestCase( SECTION, "parseFloat(' 1234E-5')", 0.01234, parseFloat(" 1234E-5") );
array[item++] = new TestCase( SECTION, "parseFloat(' +1234E-5')", 0.01234, parseFloat(" +1234E-5") );
array[item++] = new TestCase( SECTION, "parseFloat(' -1234E-5')", -0.01234, parseFloat(" -1234E-5") );
// hex cases should all return NaN
array[item++] = new TestCase( SECTION, "parseFloat(' 0x0')", 0, parseFloat(" 0x0"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0x1')", 0, parseFloat(" 0x1"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0x2')", 0, parseFloat(" 0x2"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0x3')", 0, parseFloat(" 0x3"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0x4')", 0, parseFloat(" 0x4"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0x5')", 0, parseFloat(" 0x5"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0x6')", 0, parseFloat(" 0x6"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0x7')", 0, parseFloat(" 0x7"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0x8')", 0, parseFloat(" 0x8"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0x9')", 0, parseFloat(" 0x9"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0xa')", 0, parseFloat(" 0xa"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0xb')", 0, parseFloat(" 0xb"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0xc')", 0, parseFloat(" 0xc"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0xd')", 0, parseFloat(" 0xd"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0xe')", 0, parseFloat(" 0xe"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0xf')", 0, parseFloat(" 0xf"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0xA')", 0, parseFloat(" 0xA"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0xB')", 0, parseFloat(" 0xB"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0xC')", 0, parseFloat(" 0xC"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0xD')", 0, parseFloat(" 0xD"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0xE')", 0, parseFloat(" 0xE"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0xF')", 0, parseFloat(" 0xF"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0X0')", 0, parseFloat(" 0X0"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0X1')", 0, parseFloat(" 0X1"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0X2')", 0, parseFloat(" 0X2"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0X3')", 0, parseFloat(" 0X3"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0X4')", 0, parseFloat(" 0X4"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0X5')", 0, parseFloat(" 0X5"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0X6')", 0, parseFloat(" 0X6"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0X7')", 0, parseFloat(" 0X7"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0X8')", 0, parseFloat(" 0X8"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0X9')", 0, parseFloat(" 0X9"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0Xa')", 0, parseFloat(" 0Xa"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0Xb')", 0, parseFloat(" 0Xb"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0Xc')", 0, parseFloat(" 0Xc"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0Xd')", 0, parseFloat(" 0Xd"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0Xe')", 0, parseFloat(" 0Xe"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0Xf')", 0, parseFloat(" 0Xf"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0XA')", 0, parseFloat(" 0XA"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0XB')", 0, parseFloat(" 0XB"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0XC')", 0, parseFloat(" 0XC"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0XD')", 0, parseFloat(" 0XD"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0XE')", 0, parseFloat(" 0XE"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0XF')", 0, parseFloat(" 0XF"));
// A StringNumericLiteral may not use octal notation
array[item++] = new TestCase( SECTION, "parseFloat(' 00')", 0, parseFloat(" 00"));
array[item++] = new TestCase( SECTION, "parseFloat(' 01')", 1, parseFloat(" 01"));
array[item++] = new TestCase( SECTION, "parseFloat(' 02')", 2, parseFloat(" 02"));
array[item++] = new TestCase( SECTION, "parseFloat(' 03')", 3, parseFloat(" 03"));
array[item++] = new TestCase( SECTION, "parseFloat(' 04')", 4, parseFloat(" 04"));
array[item++] = new TestCase( SECTION, "parseFloat(' 05')", 5, parseFloat(" 05"));
array[item++] = new TestCase( SECTION, "parseFloat(' 06')", 6, parseFloat(" 06"));
array[item++] = new TestCase( SECTION, "parseFloat(' 07')", 7, parseFloat(" 07"));
array[item++] = new TestCase( SECTION, "parseFloat(' 010')", 10, parseFloat(" 010"));
array[item++] = new TestCase( SECTION, "parseFloat(' 011')", 11, parseFloat(" 011"));
// A StringNumericLIteral may have any number of leading 0 digits
array[item++] = new TestCase( SECTION, "parseFloat(' 001')", 1, parseFloat(" 001"));
array[item++] = new TestCase( SECTION, "parseFloat(' 0001')", 1, parseFloat(" 0001"));
// A StringNumericLIteral may have any number of leading 0 digits
array[item++] = new TestCase( SECTION, "parseFloat(001)",