use newer sbt

This commit is contained in:
Marcin Kostrzewa 2019-06-07 12:42:35 +02:00
parent cf17a9bef8
commit b1395b6c04
3 changed files with 223 additions and 226 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
project/
target/
.idea/

View File

@ -1,11 +1,13 @@
lazy val Benchmark = config("bench") extend Test
version := "1.0"
organization := "org.enso"
scalaVersion := "2.12.8"
lazy val basic = Project(
"basic-with-separate-config",
file("."),
settings = Defaults.coreDefaultSettings ++ Seq(
lazy val root = (project in file("."))
.configs(Benchmark)
.settings(
inConfig(Benchmark)(Defaults.testSettings),
name := "enso-lexer",
organization := "org.enso",
scalaVersion := "2.12.8",
@ -26,12 +28,6 @@ lazy val basic = Project(
parallelExecution in Benchmark := false,
logBuffered := false
)
) configs(
Benchmark
) settings(
inConfig(Benchmark)(Defaults.testSettings): _*
)
SbtJFlexPlugin.jflexSettings
mainClass in (Compile, run) := Some("org.enso.main.Main")

View File

@ -1,217 +1,217 @@
package org.enso.syntax.text.lexer
import org.scalatest._
class LexerSpec extends FlatSpec with Matchers {
def lex (input:String): List[Token] = {
new Lexer(input).lexAll().to[List]
}
def lex_ (input:String): List[Symbol] = {
lex(input).map(tok => tok.symbol)
}
def assertLex (input:String, result:List[Symbol]) = {
assert(lex_(input) == (result :+ EOF))
}
def check (input:String, result:List[Symbol]) = {
it should escape(input) in { assertLex (input, result) }
}
def unexpectedSuffix (input:String): Symbol = {
Invalid(UnexpectedSuffix(input))
}
def escape(raw: String): String = {
import scala.reflect.runtime.universe._
Literal(Constant(raw)).toString
}
/////////////////
// Identifiers //
/////////////////
check("_" , Wildcard :: Nil)
check("Name" , Cons("Name") :: Nil)
check("name" , Var("name") :: Nil)
check("name'" , Var("name'") :: Nil)
check("name''" , Var("name''") :: Nil)
check("name'a" , Var("name'") :: unexpectedSuffix("a") :: Nil)
check("name_" , Var("name_") :: Nil)
check("name_'" , Var("name_'") :: Nil)
check("name'_" , Var("name'") :: unexpectedSuffix("_") :: Nil)
check("name`" , Var("name") :: Unmatched("`") :: Nil)
///////////////
// Operators //
///////////////
check("=" , Operator("=") :: Nil)
check("==" , Operator("==") :: Nil)
check("===" , Operator("==") :: unexpectedSuffix("=") :: Nil)
check(":" , Operator(":") :: Nil)
check("," , Operator(",") :: Nil)
check("." , Operator(".") :: Nil)
check(".." , Operator("..") :: Nil)
check("..." , Operator("...") :: Nil)
check("...." , Operator("...") :: unexpectedSuffix(".") :: Nil)
check(">=" , Operator(">=") :: Nil)
check("<=" , Operator("<=") :: Nil)
check("/=" , Operator("/=") :: Nil)
check("+=" , Modifier("+=") :: Nil)
check("-=" , Modifier("-=") :: Nil)
check("-=-" , Modifier("-=") :: unexpectedSuffix("-") :: Nil)
////////////
// Layout //
////////////
check("" , Nil)
check("\n" , EOL :: Nil)
check("\n\n" , EOL :: EOL :: Nil)
check("\r" , EOL :: Nil)
check("\r\n" , EOL :: Nil)
check("\n\r" , EOL :: EOL :: Nil)
check("(a)" , GroupBegin :: Var("a") :: GroupEnd :: Nil)
check("[a]" , ListBegin :: Var("a") :: ListEnd :: Nil)
check("{a}" , RecordBegin :: Var("a") :: RecordEnd :: Nil)
/////////////
// Numbers //
/////////////
check("7" , Number(10,7::Nil,Nil) :: Nil)
check("7.5" , Number(10,7::Nil,Nil) :: Operator(".") :: Number(10,5::Nil,Nil) :: Nil)
check("7_12" , Number(7,1::2::Nil,Nil) :: Nil)
check("7_12.34" , Number(7,1::2::Nil,3::4::Nil) :: Nil)
check("16_9acdf" , Number(16,9::10::12::13::15::Nil,Nil) :: Nil)
//////////
// Text //
//////////
// Basic
check("'" , TextBegin :: Nil)
check("\"" , TextRawBegin :: Nil)
check("''" , TextBegin :: TextEnd :: Nil)
check("\"\"" , TextRawBegin :: TextRawEnd :: Nil)
check("'''" , TextBegin :: Nil)
check("\"\"\"" , TextRawBegin :: Nil)
check("' '" , TextBegin :: Text(" ") :: TextEnd :: Nil)
check("\" \"" , TextRawBegin :: Text(" ") :: TextRawEnd :: Nil)
check("'' ''" , TextBegin :: TextEnd :: TextBegin :: TextEnd :: Nil)
check("\"\" \"\"" , TextRawBegin :: TextRawEnd :: TextRawBegin :: TextRawEnd :: Nil)
check("'\n'" , TextBegin :: EOL :: TextEnd :: Nil)
check("\"\n\"" , TextRawBegin :: EOL :: TextRawEnd :: Nil)
check("'\\\\'" , TextBegin :: TextEscape(SlashEscape) :: TextEnd :: Nil)
check("\"\\\\\"" , TextRawBegin :: Text("\\") :: TextEscape(RawQuoteEscape) :: Nil)
check("'\\\''" , TextBegin :: TextEscape(QuoteEscape) :: TextEnd :: Nil)
check("\"\\\'\"" , TextRawBegin :: TextEscape(QuoteEscape) :: TextRawEnd :: Nil)
check("'\\\"'" , TextBegin :: TextEscape(RawQuoteEscape) :: TextEnd :: Nil)
check("\"\\\"\"" , TextRawBegin :: TextEscape(RawQuoteEscape) :: TextRawEnd :: Nil)
check("''' '''" , TextBegin :: Text(" ") :: TextEnd :: Nil)
check("\"\"\" \"\"\"" , TextRawBegin :: Text(" ") :: TextRawEnd :: Nil)
check("''' '' '''" , TextBegin :: Text(" ") :: Text("''") :: Text(" ") :: TextEnd :: Nil)
check("\"\"\" \"\" \"\"\"" , TextRawBegin :: Text(" ") :: Text("\"\"") :: Text(" ") :: TextRawEnd :: Nil)
// Int Escapes
check("'\\12'" , TextBegin :: TextEscape(IntEscape(12)) :: TextEnd :: Nil)
check("\"\\12\"" , TextRawBegin :: Text("\\") :: Text("12") :: TextRawEnd :: Nil)
// Char Escapes
check("'\\a'" , TextBegin :: TextEscape(CharEscape(7)) :: TextEnd :: Nil)
check("'\\b'" , TextBegin :: TextEscape(CharEscape(8)) :: TextEnd :: Nil)
check("'\\f'" , TextBegin :: TextEscape(CharEscape(12)) :: TextEnd :: Nil)
check("'\\n'" , TextBegin :: TextEscape(CharEscape(10)) :: TextEnd :: Nil)
check("'\\r'" , TextBegin :: TextEscape(CharEscape(13)) :: TextEnd :: Nil)
check("'\\t'" , TextBegin :: TextEscape(CharEscape(9)) :: TextEnd :: Nil)
check("'\\v'" , TextBegin :: TextEscape(CharEscape(11)) :: TextEnd :: Nil)
check("'\\e'" , TextBegin :: TextEscape(CharEscape(27)) :: TextEnd :: Nil)
check("'\\q'" , TextBegin :: TextEscape(InvalidCharEscape('q')) :: TextEnd :: Nil)
check("\"\\a\"" , TextRawBegin :: Text("\\") :: Text("a") :: TextRawEnd :: Nil)
// Control Escapes
check("'\\NUL'" , TextBegin :: TextEscape(CtrlEscape(0)) :: TextEnd :: Nil)
check("'\\SOH'" , TextBegin :: TextEscape(CtrlEscape(1)) :: TextEnd :: Nil)
check("'\\STX'" , TextBegin :: TextEscape(CtrlEscape(2)) :: TextEnd :: Nil)
check("'\\ETX'" , TextBegin :: TextEscape(CtrlEscape(3)) :: TextEnd :: Nil)
check("'\\EOT'" , TextBegin :: TextEscape(CtrlEscape(4)) :: TextEnd :: Nil)
check("'\\ENQ'" , TextBegin :: TextEscape(CtrlEscape(5)) :: TextEnd :: Nil)
check("'\\ACK'" , TextBegin :: TextEscape(CtrlEscape(6)) :: TextEnd :: Nil)
check("'\\BEL'" , TextBegin :: TextEscape(CtrlEscape(7)) :: TextEnd :: Nil)
check("'\\BS'" , TextBegin :: TextEscape(CtrlEscape(8)) :: TextEnd :: Nil)
check("'\\TAB'" , TextBegin :: TextEscape(CtrlEscape(9)) :: TextEnd :: Nil)
check("'\\LF'" , TextBegin :: TextEscape(CtrlEscape(10)) :: TextEnd :: Nil)
check("'\\VT'" , TextBegin :: TextEscape(CtrlEscape(11)) :: TextEnd :: Nil)
check("'\\FF'" , TextBegin :: TextEscape(CtrlEscape(12)) :: TextEnd :: Nil)
check("'\\CR'" , TextBegin :: TextEscape(CtrlEscape(13)) :: TextEnd :: Nil)
check("'\\SO'" , TextBegin :: TextEscape(CtrlEscape(14)) :: TextEnd :: Nil)
check("'\\SI'" , TextBegin :: TextEscape(CtrlEscape(15)) :: TextEnd :: Nil)
check("'\\DLE'" , TextBegin :: TextEscape(CtrlEscape(16)) :: TextEnd :: Nil)
check("'\\DC1'" , TextBegin :: TextEscape(CtrlEscape(17)) :: TextEnd :: Nil)
check("'\\DC2'" , TextBegin :: TextEscape(CtrlEscape(18)) :: TextEnd :: Nil)
check("'\\DC3'" , TextBegin :: TextEscape(CtrlEscape(19)) :: TextEnd :: Nil)
check("'\\DC4'" , TextBegin :: TextEscape(CtrlEscape(20)) :: TextEnd :: Nil)
check("'\\NAK'" , TextBegin :: TextEscape(CtrlEscape(21)) :: TextEnd :: Nil)
check("'\\SYN'" , TextBegin :: TextEscape(CtrlEscape(22)) :: TextEnd :: Nil)
check("'\\ETB'" , TextBegin :: TextEscape(CtrlEscape(23)) :: TextEnd :: Nil)
check("'\\CAN'" , TextBegin :: TextEscape(CtrlEscape(24)) :: TextEnd :: Nil)
check("'\\EM'" , TextBegin :: TextEscape(CtrlEscape(25)) :: TextEnd :: Nil)
check("'\\SUB'" , TextBegin :: TextEscape(CtrlEscape(26)) :: TextEnd :: Nil)
check("'\\ESC'" , TextBegin :: TextEscape(CtrlEscape(27)) :: TextEnd :: Nil)
check("'\\FS'" , TextBegin :: TextEscape(CtrlEscape(28)) :: TextEnd :: Nil)
check("'\\GS'" , TextBegin :: TextEscape(CtrlEscape(29)) :: TextEnd :: Nil)
check("'\\RS'" , TextBegin :: TextEscape(CtrlEscape(30)) :: TextEnd :: Nil)
check("'\\US'" , TextBegin :: TextEscape(CtrlEscape(31)) :: TextEnd :: Nil)
check("'\\DEL'" , TextBegin :: TextEscape(CtrlEscape(127)) :: TextEnd :: Nil)
check("\"\\NUL\"" , TextRawBegin :: Text("\\") :: Text("NUL") :: TextRawEnd :: Nil)
// Unicode Escapes
check("'\\uF'" , TextBegin :: TextEscape(InvalidCharEscape('u')) :: Text("F") :: TextEnd :: Nil)
check("'\\uFF00'" , TextBegin :: TextEscape(Uni16Escape(0xFF00)) :: TextEnd :: Nil)
check("'\\U00ABCDEF'" , TextBegin :: TextEscape(Uni32Escape(0x00ABCDEF)) :: TextEnd :: Nil)
check("'\\UFFFFFFFF'" , TextBegin :: TextEscape(InvalidUni32Escape("FFFFFFFF")) :: TextEnd :: Nil)
check("'\\u{FF0}'" , TextBegin :: TextEscape(Uni21Escape(0xFF0)) :: TextEnd :: Nil)
check("'\\u{FFFFFFFF}'" , TextBegin :: TextEscape(InvalidUni21Escape("FFFFFFFF")) :: TextEnd :: Nil)
check("'\\u{}'" , TextBegin :: TextEscape(InvalidUni21Escape("")) :: TextEnd :: Nil)
// Interpolation
check("'`{ }`'" , TextBegin :: TextInterpolateBegin :: RecordBegin :: RecordEnd :: TextInterpolateEnd :: TextEnd :: Nil)
check("'`{ }'" , TextBegin :: TextInterpolateBegin :: RecordBegin :: RecordEnd :: TextBegin :: Nil)
check("'` `}'" , TextBegin :: TextInterpolateBegin :: TextInterpolateEnd :: Text("}") :: TextEnd :: Nil)
check("'`a`'" , TextBegin :: TextInterpolateBegin :: Var("a") :: TextInterpolateEnd :: TextEnd :: Nil)
check("'`'a'`'" , TextBegin :: TextInterpolateBegin :: TextBegin :: Text("a") :: TextEnd :: TextInterpolateEnd :: TextEnd :: Nil)
check("'''`'a'`'''" , TextBegin :: TextInterpolateBegin :: TextBegin :: Text("a") :: TextEnd :: TextInterpolateEnd :: TextEnd :: Nil)
check("'`'''a'''`'" , TextBegin :: TextInterpolateBegin :: TextBegin :: Text("a") :: TextEnd :: TextInterpolateEnd :: TextEnd :: Nil)
check("\"``\"" , TextRawBegin :: Text("``") :: TextRawEnd :: Nil)
check("'`'`a`'`'" , TextBegin :: TextInterpolateBegin :: TextBegin :: TextInterpolateBegin :: Var("a") :: TextInterpolateEnd :: TextEnd :: TextInterpolateEnd :: TextEnd :: Nil)
// Comments
check("#" , Comment :: Nil)
check("#c" , Comment :: CommentBody("c") :: Nil)
check("#c\na" , Comment :: CommentBody("c") :: EOL :: Var("a") :: Nil)
check("#c\n a" , Comment :: CommentBody("c") :: EOL :: CommentBody(" a") :: Nil)
check(" #c\n a" , Comment :: CommentBody("c") :: EOL :: Var("a") :: Nil)
check(" #c\n a" , Comment :: CommentBody("c") :: EOL :: CommentBody(" a") :: Nil)
check("a#c" , Var("a") :: Comment :: CommentBody("c") :: Nil)
check("a # c" , Var("a") :: Comment :: CommentBody(" c") :: Nil)
check("a#" , Var("a") :: Comment :: Nil)
check("a#\nb" , Var("a") :: Comment :: EOL :: Var("b") :: Nil)
check("a#\n b" , Var("a") :: Comment :: EOL :: CommentBody(" b") :: Nil)
// Disabled
check("a #= b" , Var("a") :: DisabledAssignment :: Var("b") :: Nil)
}
//
//import org.scalatest._
//
//class LexerSpec extends FlatSpec with Matchers {
//
// def lex (input:String): List[Token] = {
// new Lexer(input).lexAll().to[List]
// }
//
// def lex_ (input:String): List[Symbol] = {
// lex(input).map(tok => tok.symbol)
// }
//
// def assertLex (input:String, result:List[Symbol]) = {
// assert(lex_(input) == (result :+ EOF))
// }
//
// def check (input:String, result:List[Symbol]) = {
// it should escape(input) in { assertLex (input, result) }
// }
//
// def unexpectedSuffix (input:String): Symbol = {
// Invalid(UnexpectedSuffix(input))
// }
//
// def escape(raw: String): String = {
// import scala.reflect.runtime.universe._
// Literal(Constant(raw)).toString
// }
//
//
//
// /////////////////
// // Identifiers //
// /////////////////
//
// check("_" , Wildcard :: Nil)
// check("Name" , Cons("Name") :: Nil)
// check("name" , Var("name") :: Nil)
// check("name'" , Var("name'") :: Nil)
// check("name''" , Var("name''") :: Nil)
// check("name'a" , Var("name'") :: unexpectedSuffix("a") :: Nil)
// check("name_" , Var("name_") :: Nil)
// check("name_'" , Var("name_'") :: Nil)
// check("name'_" , Var("name'") :: unexpectedSuffix("_") :: Nil)
// check("name`" , Var("name") :: Unmatched("`") :: Nil)
//
//
//
// ///////////////
// // Operators //
// ///////////////
//
// check("=" , Operator("=") :: Nil)
// check("==" , Operator("==") :: Nil)
// check("===" , Operator("==") :: unexpectedSuffix("=") :: Nil)
// check(":" , Operator(":") :: Nil)
// check("," , Operator(",") :: Nil)
// check("." , Operator(".") :: Nil)
// check(".." , Operator("..") :: Nil)
// check("..." , Operator("...") :: Nil)
// check("...." , Operator("...") :: unexpectedSuffix(".") :: Nil)
// check(">=" , Operator(">=") :: Nil)
// check("<=" , Operator("<=") :: Nil)
// check("/=" , Operator("/=") :: Nil)
// check("+=" , Modifier("+=") :: Nil)
// check("-=" , Modifier("-=") :: Nil)
// check("-=-" , Modifier("-=") :: unexpectedSuffix("-") :: Nil)
//
//
//
// ////////////
// // Layout //
// ////////////
//
// check("" , Nil)
// check("\n" , EOL :: Nil)
// check("\n\n" , EOL :: EOL :: Nil)
// check("\r" , EOL :: Nil)
// check("\r\n" , EOL :: Nil)
// check("\n\r" , EOL :: EOL :: Nil)
// check("(a)" , GroupBegin :: Var("a") :: GroupEnd :: Nil)
// check("[a]" , ListBegin :: Var("a") :: ListEnd :: Nil)
// check("{a}" , RecordBegin :: Var("a") :: RecordEnd :: Nil)
//
//
//
// /////////////
// // Numbers //
// /////////////
//
// check("7" , Number(10,7::Nil,Nil) :: Nil)
// check("7.5" , Number(10,7::Nil,Nil) :: Operator(".") :: Number(10,5::Nil,Nil) :: Nil)
// check("7_12" , Number(7,1::2::Nil,Nil) :: Nil)
// check("7_12.34" , Number(7,1::2::Nil,3::4::Nil) :: Nil)
// check("16_9acdf" , Number(16,9::10::12::13::15::Nil,Nil) :: Nil)
//
//
//
// //////////
// // Text //
// //////////
//
// // Basic
// check("'" , TextBegin :: Nil)
// check("\"" , TextRawBegin :: Nil)
// check("''" , TextBegin :: TextEnd :: Nil)
// check("\"\"" , TextRawBegin :: TextRawEnd :: Nil)
// check("'''" , TextBegin :: Nil)
// check("\"\"\"" , TextRawBegin :: Nil)
// check("' '" , TextBegin :: Text(" ") :: TextEnd :: Nil)
// check("\" \"" , TextRawBegin :: Text(" ") :: TextRawEnd :: Nil)
// check("'' ''" , TextBegin :: TextEnd :: TextBegin :: TextEnd :: Nil)
// check("\"\" \"\"" , TextRawBegin :: TextRawEnd :: TextRawBegin :: TextRawEnd :: Nil)
// check("'\n'" , TextBegin :: EOL :: TextEnd :: Nil)
// check("\"\n\"" , TextRawBegin :: EOL :: TextRawEnd :: Nil)
// check("'\\\\'" , TextBegin :: TextEscape(SlashEscape) :: TextEnd :: Nil)
// check("\"\\\\\"" , TextRawBegin :: Text("\\") :: TextEscape(RawQuoteEscape) :: Nil)
// check("'\\\''" , TextBegin :: TextEscape(QuoteEscape) :: TextEnd :: Nil)
// check("\"\\\'\"" , TextRawBegin :: TextEscape(QuoteEscape) :: TextRawEnd :: Nil)
// check("'\\\"'" , TextBegin :: TextEscape(RawQuoteEscape) :: TextEnd :: Nil)
// check("\"\\\"\"" , TextRawBegin :: TextEscape(RawQuoteEscape) :: TextRawEnd :: Nil)
// check("''' '''" , TextBegin :: Text(" ") :: TextEnd :: Nil)
// check("\"\"\" \"\"\"" , TextRawBegin :: Text(" ") :: TextRawEnd :: Nil)
// check("''' '' '''" , TextBegin :: Text(" ") :: Text("''") :: Text(" ") :: TextEnd :: Nil)
// check("\"\"\" \"\" \"\"\"" , TextRawBegin :: Text(" ") :: Text("\"\"") :: Text(" ") :: TextRawEnd :: Nil)
//
// // Int Escapes
// check("'\\12'" , TextBegin :: TextEscape(IntEscape(12)) :: TextEnd :: Nil)
// check("\"\\12\"" , TextRawBegin :: Text("\\") :: Text("12") :: TextRawEnd :: Nil)
//
// // Char Escapes
// check("'\\a'" , TextBegin :: TextEscape(CharEscape(7)) :: TextEnd :: Nil)
// check("'\\b'" , TextBegin :: TextEscape(CharEscape(8)) :: TextEnd :: Nil)
// check("'\\f'" , TextBegin :: TextEscape(CharEscape(12)) :: TextEnd :: Nil)
// check("'\\n'" , TextBegin :: TextEscape(CharEscape(10)) :: TextEnd :: Nil)
// check("'\\r'" , TextBegin :: TextEscape(CharEscape(13)) :: TextEnd :: Nil)
// check("'\\t'" , TextBegin :: TextEscape(CharEscape(9)) :: TextEnd :: Nil)
// check("'\\v'" , TextBegin :: TextEscape(CharEscape(11)) :: TextEnd :: Nil)
// check("'\\e'" , TextBegin :: TextEscape(CharEscape(27)) :: TextEnd :: Nil)
// check("'\\q'" , TextBegin :: TextEscape(InvalidCharEscape('q')) :: TextEnd :: Nil)
// check("\"\\a\"" , TextRawBegin :: Text("\\") :: Text("a") :: TextRawEnd :: Nil)
//
// // Control Escapes
// check("'\\NUL'" , TextBegin :: TextEscape(CtrlEscape(0)) :: TextEnd :: Nil)
// check("'\\SOH'" , TextBegin :: TextEscape(CtrlEscape(1)) :: TextEnd :: Nil)
// check("'\\STX'" , TextBegin :: TextEscape(CtrlEscape(2)) :: TextEnd :: Nil)
// check("'\\ETX'" , TextBegin :: TextEscape(CtrlEscape(3)) :: TextEnd :: Nil)
// check("'\\EOT'" , TextBegin :: TextEscape(CtrlEscape(4)) :: TextEnd :: Nil)
// check("'\\ENQ'" , TextBegin :: TextEscape(CtrlEscape(5)) :: TextEnd :: Nil)
// check("'\\ACK'" , TextBegin :: TextEscape(CtrlEscape(6)) :: TextEnd :: Nil)
// check("'\\BEL'" , TextBegin :: TextEscape(CtrlEscape(7)) :: TextEnd :: Nil)
// check("'\\BS'" , TextBegin :: TextEscape(CtrlEscape(8)) :: TextEnd :: Nil)
// check("'\\TAB'" , TextBegin :: TextEscape(CtrlEscape(9)) :: TextEnd :: Nil)
// check("'\\LF'" , TextBegin :: TextEscape(CtrlEscape(10)) :: TextEnd :: Nil)
// check("'\\VT'" , TextBegin :: TextEscape(CtrlEscape(11)) :: TextEnd :: Nil)
// check("'\\FF'" , TextBegin :: TextEscape(CtrlEscape(12)) :: TextEnd :: Nil)
// check("'\\CR'" , TextBegin :: TextEscape(CtrlEscape(13)) :: TextEnd :: Nil)
// check("'\\SO'" , TextBegin :: TextEscape(CtrlEscape(14)) :: TextEnd :: Nil)
// check("'\\SI'" , TextBegin :: TextEscape(CtrlEscape(15)) :: TextEnd :: Nil)
// check("'\\DLE'" , TextBegin :: TextEscape(CtrlEscape(16)) :: TextEnd :: Nil)
// check("'\\DC1'" , TextBegin :: TextEscape(CtrlEscape(17)) :: TextEnd :: Nil)
// check("'\\DC2'" , TextBegin :: TextEscape(CtrlEscape(18)) :: TextEnd :: Nil)
// check("'\\DC3'" , TextBegin :: TextEscape(CtrlEscape(19)) :: TextEnd :: Nil)
// check("'\\DC4'" , TextBegin :: TextEscape(CtrlEscape(20)) :: TextEnd :: Nil)
// check("'\\NAK'" , TextBegin :: TextEscape(CtrlEscape(21)) :: TextEnd :: Nil)
// check("'\\SYN'" , TextBegin :: TextEscape(CtrlEscape(22)) :: TextEnd :: Nil)
// check("'\\ETB'" , TextBegin :: TextEscape(CtrlEscape(23)) :: TextEnd :: Nil)
// check("'\\CAN'" , TextBegin :: TextEscape(CtrlEscape(24)) :: TextEnd :: Nil)
// check("'\\EM'" , TextBegin :: TextEscape(CtrlEscape(25)) :: TextEnd :: Nil)
// check("'\\SUB'" , TextBegin :: TextEscape(CtrlEscape(26)) :: TextEnd :: Nil)
// check("'\\ESC'" , TextBegin :: TextEscape(CtrlEscape(27)) :: TextEnd :: Nil)
// check("'\\FS'" , TextBegin :: TextEscape(CtrlEscape(28)) :: TextEnd :: Nil)
// check("'\\GS'" , TextBegin :: TextEscape(CtrlEscape(29)) :: TextEnd :: Nil)
// check("'\\RS'" , TextBegin :: TextEscape(CtrlEscape(30)) :: TextEnd :: Nil)
// check("'\\US'" , TextBegin :: TextEscape(CtrlEscape(31)) :: TextEnd :: Nil)
// check("'\\DEL'" , TextBegin :: TextEscape(CtrlEscape(127)) :: TextEnd :: Nil)
// check("\"\\NUL\"" , TextRawBegin :: Text("\\") :: Text("NUL") :: TextRawEnd :: Nil)
//
// // Unicode Escapes
// check("'\\uF'" , TextBegin :: TextEscape(InvalidCharEscape('u')) :: Text("F") :: TextEnd :: Nil)
// check("'\\uFF00'" , TextBegin :: TextEscape(Uni16Escape(0xFF00)) :: TextEnd :: Nil)
// check("'\\U00ABCDEF'" , TextBegin :: TextEscape(Uni32Escape(0x00ABCDEF)) :: TextEnd :: Nil)
// check("'\\UFFFFFFFF'" , TextBegin :: TextEscape(InvalidUni32Escape("FFFFFFFF")) :: TextEnd :: Nil)
// check("'\\u{FF0}'" , TextBegin :: TextEscape(Uni21Escape(0xFF0)) :: TextEnd :: Nil)
// check("'\\u{FFFFFFFF}'" , TextBegin :: TextEscape(InvalidUni21Escape("FFFFFFFF")) :: TextEnd :: Nil)
// check("'\\u{}'" , TextBegin :: TextEscape(InvalidUni21Escape("")) :: TextEnd :: Nil)
//
// // Interpolation
// check("'`{ }`'" , TextBegin :: TextInterpolateBegin :: RecordBegin :: RecordEnd :: TextInterpolateEnd :: TextEnd :: Nil)
// check("'`{ }'" , TextBegin :: TextInterpolateBegin :: RecordBegin :: RecordEnd :: TextBegin :: Nil)
// check("'` `}'" , TextBegin :: TextInterpolateBegin :: TextInterpolateEnd :: Text("}") :: TextEnd :: Nil)
// check("'`a`'" , TextBegin :: TextInterpolateBegin :: Var("a") :: TextInterpolateEnd :: TextEnd :: Nil)
// check("'`'a'`'" , TextBegin :: TextInterpolateBegin :: TextBegin :: Text("a") :: TextEnd :: TextInterpolateEnd :: TextEnd :: Nil)
// check("'''`'a'`'''" , TextBegin :: TextInterpolateBegin :: TextBegin :: Text("a") :: TextEnd :: TextInterpolateEnd :: TextEnd :: Nil)
// check("'`'''a'''`'" , TextBegin :: TextInterpolateBegin :: TextBegin :: Text("a") :: TextEnd :: TextInterpolateEnd :: TextEnd :: Nil)
// check("\"``\"" , TextRawBegin :: Text("``") :: TextRawEnd :: Nil)
// check("'`'`a`'`'" , TextBegin :: TextInterpolateBegin :: TextBegin :: TextInterpolateBegin :: Var("a") :: TextInterpolateEnd :: TextEnd :: TextInterpolateEnd :: TextEnd :: Nil)
//
// // Comments
// check("#" , Comment :: Nil)
// check("#c" , Comment :: CommentBody("c") :: Nil)
// check("#c\na" , Comment :: CommentBody("c") :: EOL :: Var("a") :: Nil)
// check("#c\n a" , Comment :: CommentBody("c") :: EOL :: CommentBody(" a") :: Nil)
// check(" #c\n a" , Comment :: CommentBody("c") :: EOL :: Var("a") :: Nil)
// check(" #c\n a" , Comment :: CommentBody("c") :: EOL :: CommentBody(" a") :: Nil)
// check("a#c" , Var("a") :: Comment :: CommentBody("c") :: Nil)
// check("a # c" , Var("a") :: Comment :: CommentBody(" c") :: Nil)
// check("a#" , Var("a") :: Comment :: Nil)
// check("a#\nb" , Var("a") :: Comment :: EOL :: Var("b") :: Nil)
// check("a#\n b" , Var("a") :: Comment :: EOL :: CommentBody(" b") :: Nil)
//
// // Disabled
// check("a #= b" , Var("a") :: DisabledAssignment :: Var("b") :: Nil)
//
//}