This is an automated email from the ASF dual-hosted git repository.

sergeykamov pushed a commit to branch NLPCRAFT-30
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git


The following commit(s) were added to refs/heads/NLPCRAFT-30 by this push:
     new 896811b  WIP.
896811b is described below

commit 896811b71549022e70cde8e7e83c7b3fc14c5346
Author: Sergey Kamov <[email protected]>
AuthorDate: Sun Apr 19 23:16:07 2020 +0300

    WIP.
---
 .../apache/nlpcraft/model/impl/NCTokenLogger.scala |  64 +++--
 .../mgrs/nlp/enrichers/sort/NCSortEnricher.scala   |  67 ++---
 .../mgrs/nlp/enrichers/NCEnrichersTestBeans.scala  | 115 +++++----
 .../nlp/enrichers/sort/NCEnricherSortSpec.scala    | 277 +++++++++++----------
 4 files changed, 301 insertions(+), 222 deletions(-)

diff --git a/src/main/scala/org/apache/nlpcraft/model/impl/NCTokenLogger.scala 
b/src/main/scala/org/apache/nlpcraft/model/impl/NCTokenLogger.scala
index 00e3140..bbff9b9 100644
--- a/src/main/scala/org/apache/nlpcraft/model/impl/NCTokenLogger.scala
+++ b/src/main/scala/org/apache/nlpcraft/model/impl/NCTokenLogger.scala
@@ -80,7 +80,7 @@ object NCTokenLogger extends LazyLogging {
             "nlpcraft:city" → Seq("city", "latitude", "longitude", "region", 
"country", "subcontinent", "continent"),
             "nlpcraft:date" → Seq("from", "to", "periods"),
             "nlpcraft:relation" → Seq("type", "indexes", "note"),
-            "nlpcraft:sort" → Seq("asc", "indexes", "note"),
+            "nlpcraft:sort" → Seq("asc", "subjnotes", "subjindexes", 
"bynotes", "byindexes"),
             "nlpcraft:limit" → Seq("limit", "indexes", "asc", "note")
         ).map(p ⇒ p._1 → p._2.zipWithIndex.map(p ⇒ p._1 → p._2).toMap)
 
@@ -183,7 +183,13 @@ object NCTokenLogger extends LazyLogging {
 
             def mkDouble3(name: String): Double = 
(getValue(name).asInstanceOf[Double] * 1000).intValue / 1000.0
 
-            def getIndexes: String = 
getValue("indexes").asInstanceOf[util.List[Int]].asScala.mkString(",")
+            def indexes2String(v: java.io.Serializable): String = 
v.asInstanceOf[util.List[Int]].asScala.mkString(",")
+            def mkIndexes(name: String): String = 
indexes2String(getValue(name))
+            def mkIndexesOpt(name: String): Option[String] =
+                getValueOpt(name) match {
+                    case Some(indexes) ⇒ Some(indexes2String(indexes))
+                    case None ⇒ None
+                }
 
             def getSeq(names: String*): String = names.flatMap(name ⇒ 
mkStringOpt(name)).mkString("|")
 
@@ -207,20 +213,38 @@ object NCTokenLogger extends LazyLogging {
                     val t = mkString("type")
                     val note = mkString("note")
 
-                    s"type=$t, indexes=[$getIndexes], note=$note"
+                    s"type=$t, indexes=[${mkIndexes("indexes")}], note=$note"
 
                 case "nlpcraft:sort" ⇒
-                    val asc = mkBool("asc")
-                    val note = mkString("note")
+                    var s =
+                        mkStringOpt("subjnotes") match {
+                            case Some(subjnotes) ⇒ s"subjnotes=$subjnotes, 
subjindexes=${mkIndexes("subjindexes")}"
+                            case None ⇒ ""
+                        }
+
+                    mkStringOpt("bynotes") match {
+                        case Some(bynotes) ⇒
+                            val sBy = s"bynotes=$bynotes, 
byindexes=${mkIndexes("byindexes")}"
+
+                            s = if (s.nonEmpty) s"$s, $sBy" else sBy
+                        case None ⇒ // No-op.
+                    }
+
+                    val ascOpt = mkBoolOpt("asc")
+
+                    ascOpt match {
+                        case Some(asc) ⇒ s = s"$s, asc=$asc"
+                        case None ⇒ // No-op.
+                    }
 
-                    s"asc=$asc, indexes=[$getIndexes], note=$note"
+                    s
 
                 case "nlpcraft:limit" ⇒
                     val limit = mkDouble3("limit")
                     val ascOpt = mkBoolOpt("asc")
                     val note = mkString("note")
 
-                    var s = s"limit=$limit, indexes=[$getIndexes], note=$note"
+                    var s = s"limit=$limit, indexes=[${mkIndexes("indexes")}], 
note=$note"
 
                     ascOpt match {
                         case Some(asc) ⇒ s = s"$s, asc=$asc"
@@ -453,18 +477,26 @@ object NCTokenLogger extends LazyLogging {
                         case "nlpcraft:sort" ⇒
                             def x(l: java.util.List[String]): String = 
l.asScala.mkString(", ")
 
-                            var s = s"subjNotes=${x(get("subjnotes"))}, 
subjIndexes=[${getIndexes("subjindexes")}]"
+                            def getList(notesName: String, indexesName: 
String): String = {
+                                val notesOpt: Option[java.util.List[String]] = 
getOpt(notesName)
 
-                            if (has("asc"))
-                                s = s"$s, asc=${get("asc")}"
+                                notesOpt match {
+                                    case Some(notes) ⇒
+                                        s"$notesName=${x(notes)}, 
$indexesName=[${getIndexes(indexesName)}]"
+                                    case None ⇒ ""
+                                }
+                            }
 
-                            val byNotesOpt: Option[java.util.List[String]] = 
getOpt("bynotes")
+                            var s = getList("subjnotes", "subjindexes")
+                            val by = getList("bynotes", "byindexes")
 
-                            byNotesOpt match {
-                                case Some(byNotes) ⇒
-                                    s = s"$s, byNotes=${x(byNotes)}, 
byIndexes=[${getIndexes("byindexes")}]"
-                                case None ⇒ // No-op.
-                            }
+                            if (by.nonEmpty)
+                                s = if (s.nonEmpty) s"$s, $by" else by
+
+                            require(s.nonEmpty)
+
+                            if (has("asc"))
+                                s = s"$s, asc=${get("asc")}"
 
                             s
                         case "nlpcraft:limit" ⇒
diff --git 
a/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/sort/NCSortEnricher.scala
 
b/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/sort/NCSortEnricher.scala
index 8d714c2..993dd45 100644
--- 
a/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/sort/NCSortEnricher.scala
+++ 
b/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/sort/NCSortEnricher.scala
@@ -405,43 +405,54 @@ object NCSortEnricher extends NCProbeEnricher {
             for (toks ← ns.tokenMixWithStopWords() if areSuitableTokens(buf, 
toks))
                 tryToMatch(toks) match {
                     case Some(m) ⇒
-                        for (subj ← m.subjSeq) {
-                            def addNotes(
-                                params: ArrayBuffer[(String, Any)],
-                                seq: Seq[NoteData],
-                                notesName: String,
-                                idxsName: String
-                            ): ArrayBuffer[(String, Any)] = {
-                                params += notesName → seq.map(_.note).asJava
-                                params += idxsName → 
seq.map(_.indexes.asJava).asJava
-
-                                params
-                            }
+                        def addNotes(
+                            params: ArrayBuffer[(String, Any)],
+                            seq: Seq[NoteData],
+                            notesName: String,
+                            idxsName: String
+                        ): ArrayBuffer[(String, Any)] = {
+                            params += notesName → seq.map(_.note).asJava
+                            params += idxsName → 
seq.map(_.indexes.asJava).asJava
+
+                            params
+                        }
 
-                            def mkParams(): ArrayBuffer[(String, Any)] = {
-                                val params = 
mutable.ArrayBuffer.empty[(String, Any)]
+                        def mkNote(params: ArrayBuffer[(String, Any)]): Unit = 
{
+                            val note = NCNlpSentenceNote(m.main.map(_.index), 
TOK_ID, params: _*)
 
-                                if (m.asc.isDefined)
-                                    params += "asc" → m.asc.get
+                            m.main.foreach(_.add(note))
+                            m.stop.foreach(_.addStopReason(note))
 
-                                addNotes(params, subj, "subjnotes", 
"subjindexes")
-                            }
+                            buf += toks.toSet
+                        }
 
-                            def mkNote(params: ArrayBuffer[(String, Any)]): 
Unit = {
-                                val note = 
NCNlpSentenceNote(m.main.map(_.index), TOK_ID, params: _*)
+                        def mkParams(): mutable.ArrayBuffer[(String, Any)] = {
+                            val params = mutable.ArrayBuffer.empty[(String, 
Any)]
 
-                                m.main.foreach(_.add(note))
-                                m.stop.foreach(_.addStopReason(note))
+                            if (m.asc.isDefined)
+                                params += "asc" → m.asc.get
 
-                                buf += toks.toSet
+                            params
+                        }
+
+                        if (m.subjSeq.nonEmpty)
+                            for (subj ← m.subjSeq) {
+                                def addSubj(): ArrayBuffer[(String, Any)] =
+                                    addNotes(mkParams(), subj, "subjnotes", 
"subjindexes")
+
+                                if (m.bySeq.nonEmpty)
+                                    for (by ← m.bySeq)
+                                        mkNote(addNotes(addSubj(), by, 
"bynotes", "byindexes"))
+                                else
+                                    mkNote(addSubj())
                             }
+                        else {
+                            require(m.bySeq.nonEmpty)
 
-                            if (m.bySeq.nonEmpty)
-                                for (by ← m.bySeq)
-                                    mkNote(addNotes(mkParams(), by, "bynotes", 
"byindexes"))
-                            else
-                                mkNote(mkParams())
+                            for (by ← m.bySeq)
+                                mkNote(addNotes(mkParams(), by, "bynotes", 
"byindexes"))
                         }
+
                     case None ⇒ // No-op.
                 }
         }
diff --git 
a/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/NCEnrichersTestBeans.scala
 
b/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/NCEnrichersTestBeans.scala
index 9775ba1..7746d72 100644
--- 
a/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/NCEnrichersTestBeans.scala
+++ 
b/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/NCEnrichersTestBeans.scala
@@ -120,17 +120,16 @@ case class NCTestMetroToken(text: String, metro: String) 
extends NCTestToken {
 // Probe enrichers.
 case class NCTestSortToken(
     text: String,
-    subjNotes: Seq[String],
-    subjIndexes: Seq[Int],
+    subjNotes: Option[Seq[String]] = None,
+    subjIndexes: Option[Seq[Int]] = None,
     byNotes: Option[Seq[String]] = None,
     byIndexes: Option[Seq[Int]] = None,
     asc: Option[Boolean] = None
 ) extends NCTestToken {
     require(text != null)
     require(subjNotes != null)
-    require(subjNotes.nonEmpty)
-    require(subjIndexes != null)
-    require(subjIndexes.nonEmpty)
+    require(subjNotes.nonEmpty || byNotes.nonEmpty)
+    require(subjIndexes.nonEmpty || byIndexes.nonEmpty)
     require(byNotes != null)
     require(byNotes.isEmpty || byNotes.get.nonEmpty)
     require(byIndexes != null)
@@ -139,15 +138,21 @@ case class NCTestSortToken(
 
     override def id: String = "nlpcraft:sort"
     override def toString: String = {
-        var s = s"$text(sort)" +
-            s"<subjNotes=[${subjNotes.mkString(",")}]" +
-            s", subjIndexes=[${subjIndexes.mkString(",")}]"
+        var s = ""
 
-        if (byNotes.isDefined)
+        if (subjNotes.isDefined)
             s = s"$s" +
+                s", subjNotes=[${subjNotes.get.mkString(",")}]" +
+                s", subjIndexes=[${subjIndexes.get.mkString(",")}]"
+
+        if (byNotes.isDefined) {
+            val sBy = s"$s" +
                 s", byNotes=[${byNotes.get.mkString(",")}]" +
                 s", byIndexes=[${byIndexes.get.mkString(",")}]"
 
+            s = if (s.nonEmpty) s"$s, $sBy" else sBy
+        }
+
         if (asc.isDefined)
             s = s"$s, asc=${asc.get}"
 
@@ -158,41 +163,64 @@ case class NCTestSortToken(
 }
 
 object NCTestSortToken {
-    def apply(
-        text: String,
-        subjNotes: Seq[String],
-        subjIndexes: Seq[Int],
-        asc: Boolean
-    ): NCTestSortToken = new NCTestSortToken(text, subjNotes, subjIndexes, 
None, None, Some(asc))
-
-    def apply(
-        text: String,
-        subjNote: String,
-        subjIndex: Int,
-        asc: Boolean
-    ): NCTestSortToken = new NCTestSortToken(text, Seq(subjNote), 
Seq(subjIndex), None, None, Some(asc))
-
-    def apply(
-        text: String,
-        subjNote: String,
-        subjIndex: Int
-    ): NCTestSortToken = new NCTestSortToken(text, Seq(subjNote), 
Seq(subjIndex), None, None, None)
-
-    def apply(
-        text: String,
-        subjNotes: Seq[String],
-        subjIndexes: Seq[Int],
-        byNotes: Seq[String],
-        byIndexes: Seq[Int]
-    ): NCTestSortToken = new NCTestSortToken(text, subjNotes, subjIndexes, 
Some(byNotes), Some(byIndexes), None)
+    private def cStr(seq: Seq[String]): Option[Seq[String]] = if (seq.isEmpty) 
None else Some(seq)
+    private def cInt(seq: Seq[Int]): Option[Seq[Int]] = if (seq.isEmpty) None 
else Some(seq)
+
+//    def apply(
+//        text: String,
+//        subjNotes: Seq[String] = Seq.empty,
+//        subjIndexes: Seq[Int] = Seq.empty,
+//        byNotes: Seq[String] = Seq.empty,
+//        byIndexes: Seq[Int] = Seq.empty,
+//        asc: Boolean
+//    ): NCTestSortToken =
+//        new NCTestSortToken(text, cStr(subjNotes), cInt(subjIndexes), 
cStr(byNotes), cInt(byIndexes), Some(asc))
+//
+//    def apply(
+//        text: String,
+//        subjNotes: Seq[String] = Seq.empty,
+//        subjIndexes: Seq[Int] = Seq.empty,
+//        byNotes: Seq[String] = Seq.empty,
+//        byIndexes: Seq[Int] = Seq.empty,
+//        asc: Option[Boolean] = None
+//    ): NCTestSortToken =
+//        new NCTestSortToken(text, cStr(subjNotes), cInt(subjIndexes), 
cStr(byNotes), cInt(byIndexes), asc)
+
+//    def apply(
+//        text: String,
+//        subjNotes: Option[Seq[String]] = None,
+//        subjIndexes: Option[Seq[Int]] = None,
+//        byNotes: Option[Seq[String]] = None,
+//        byIndexes: Option[Seq[Int]] = None,
+//        asc: Boolean
+//    ): NCTestSortToken = new NCTestSortToken(text, subjNotes, subjIndexes, 
byNotes, byIndexes, Some(asc))
+
+//    def apply(
+//        text: String,
+//        subjNote: String,
+//        subjIndex: Int,
+//        byNotes: Option[Seq[String]] = None,
+//        byIndexes: Option[Seq[Int]] = None,
+//        asc: Boolean
+//    ): NCTestSortToken = new NCTestSortToken(text, Some(Seq(subjNote)), 
Some(Seq(subjIndex)), byNotes, byIndexes, Some(asc))
+
+//    def apply(
+//        text: String,
+//        subjNote: String,
+//        subjIndex: Int,
+//        byNotes: Option[Seq[String]] = None,
+//        byIndexes: Option[Seq[Int]] = None,
+//        asc: Option[Boolean] = None
+//    ): NCTestSortToken = new NCTestSortToken(text, Some(Seq(subjNote)), 
Some(Seq(subjIndex)), byNotes, byIndexes, asc)
 
     def apply(
         text: String,
         subjNote: String,
         subjIndex: Int,
         byNote: String,
-        byIndex: Int): NCTestSortToken =
-        new NCTestSortToken(text, Seq(subjNote), Seq(subjIndex), 
Some(Seq(byNote)), Some(Seq(byIndex)), None)
+        byIndex: Int
+    ): NCTestSortToken =
+        new NCTestSortToken(text, Some(Seq(subjNote)), Some(Seq(subjIndex)), 
Some(Seq(byNote)), Some(Seq(byIndex)), None)
 
     def apply(
         text: String,
@@ -200,8 +228,9 @@ object NCTestSortToken {
         subjIndex: Int,
         byNote: String,
         byIndex: Int,
-        asc: Boolean): NCTestSortToken =
-        new NCTestSortToken(text, Seq(subjNote), Seq(subjIndex), 
Some(Seq(byNote)), Some(Seq(byIndex)), Some(asc))
+        asc: Boolean
+    ): NCTestSortToken =
+        new NCTestSortToken(text, Some(Seq(subjNote)), Some(Seq(subjIndex)), 
Some(Seq(byNote)), Some(Seq(byIndex)), Some(asc))
 }
 
 case class NCTestRelationToken(text: String, `type`: String, indexes: 
Seq[Int], note: String) extends NCTestToken {
@@ -296,8 +325,8 @@ object NCTestToken {
             case "nlpcraft:continent" ⇒ NCTestContinentToken(txt, continent = 
t.meta("nlpcraft:continent:continent"))
             case "nlpcraft:metro" ⇒ NCTestMetroToken(txt, metro = 
t.meta("nlpcraft:metro:metro"))
             case "nlpcraft:sort" ⇒
-                val subjNotes: java.util.List[String] = 
t.meta("nlpcraft:sort:subjnotes")
-                val subjIndexes: java.util.List[Int] = 
t.meta("nlpcraft:sort:subjindexes")
+                val subjNotes: Optional[java.util.List[String]] = 
t.metaOpt("nlpcraft:sort:subjnotes")
+                val subjIndexes: Optional[java.util.List[Int]] = 
t.metaOpt("nlpcraft:sort:subjindexes")
                 val byNotes: Optional[java.util.List[String]] = 
t.metaOpt("nlpcraft:sort:bynotes")
                 val byIndexes: Optional[java.util.List[Int]] = 
t.metaOpt("nlpcraft:sort:byindexes")
                 val asc: Optional[Boolean] = t.metaOpt("nlpcraft:sort:asc")
@@ -308,7 +337,7 @@ object NCTestToken {
                         case None ⇒ None
                     }
 
-                NCTestSortToken(txt, subjNotes.asScala, subjIndexes.asScala, 
toOpt(byNotes), toOpt(byIndexes), asc.asScala)
+                NCTestSortToken(txt, toOpt(subjNotes), toOpt(subjIndexes), 
toOpt(byNotes), toOpt(byIndexes), asc.asScala)
             case "nlpcraft:relation" ⇒
                 val indexes: java.util.List[Int] = 
t.meta("nlpcraft:relation:indexes")
 
diff --git 
a/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/sort/NCEnricherSortSpec.scala
 
b/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/sort/NCEnricherSortSpec.scala
index a4a314d..b06f22b 100644
--- 
a/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/sort/NCEnricherSortSpec.scala
+++ 
b/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/sort/NCEnricherSortSpec.scala
@@ -24,139 +24,146 @@ import org.junit.jupiter.api.Test
   * Sort enricher test.
   */
 class NCEnricherSortSpec extends NCEnricherBaseSpec {
-    /**
-      *
-      * @throws Exception
-      */
-    @Test
-    def test(): Unit =
-        runBatch(
-            _ ⇒ checkExists(
-                "sort A",
-                srt(text = "sort", subjNote = "A", subjIndex = 1),
-                usr("A", "A")
-            ),
-            _ ⇒ checkExists(
-                "sort A by A",
-                srt(text = "sort", subjNote = "A", subjIndex = 1, byNote = 
"A", byIndex = 3),
-                usr(text = "A", id = "A"),
-                nlp(text = "by", isStop = true),
-                usr(text = "A", id = "A")
-            ),
-            _ ⇒ checkExists(
-                "sort A, C by A, C",
-                srt(text = "sort", subjNotes = Seq("A", "C"), subjIndexes = 
Seq(1, 3), byNotes = Seq("A", "C"), byIndexes = Seq(5, 7)),
-                usr(text = "A", id = "A"),
-                nlp(text = ",", isStop = true),
-                usr(text = "C", id = "C"),
-                nlp(text = "by", isStop = true),
-                usr(text = "A", id = "A"),
-                nlp(text = ",", isStop = true),
-                usr(text = "C", id = "C")
-            ),
-            _ ⇒ checkExists(
-                "sort A C by A C",
-                srt(text = "sort", subjNotes = Seq("A", "C"), subjIndexes = 
Seq(1, 2), byNotes = Seq("A", "C"), byIndexes = Seq(4, 5)),
-                usr(text = "A", id = "A"),
-                usr(text = "C", id = "C"),
-                nlp(text = "by", isStop = true),
-                usr(text = "A", id = "A"),
-                usr(text = "C", id = "C")
-            ),
-            _ ⇒ checkExists(
-                "sort A B by A B",
-                srt(text = "sort", subjNotes = Seq("A", "B"), subjIndexes = 
Seq(1, 2), byNotes = Seq("A", "B"), byIndexes = Seq(4, 5)),
-                usr(text = "A", id = "A"),
-                usr(text = "B", id = "B"),
-                nlp(text = "by", isStop = true),
-                usr(text = "A", id = "A"),
-                usr(text = "B", id = "B")
-            ),
-            _ ⇒ checkExists(
-                "sort A B by A B",
-                srt(text = "sort", subjNote = "AB", subjIndex = 1, byNote = 
"AB", byIndex = 3),
-                usr(text = "A B", id = "AB"),
-                nlp(text = "by", isStop = true),
-                usr(text = "A B", id = "AB")
-            ),
-            _ ⇒ checkExists(
-                "A classify",
-                usr(text = "A", id = "A"),
-                srt(text = "classify", subjNote = "A", subjIndex = 0)
-            ),
-            _ ⇒ checkExists(
-                "the A the classify",
-                nlp(text = "the", isStop = true),
-                usr(text = "A", id = "A"),
-                nlp(text = "the", isStop = true),
-                srt(text = "classify", subjNote = "A", subjIndex = 1)
-            ),
-            _ ⇒ checkExists(
-                "segment A by top down",
-                srt(text = "segment", subjNote = "A", subjIndex = 1, asc = 
false),
-                usr(text = "A", id = "A"),
-                nlp(text = "by top down", isStop = true)
-            ),
-            _ ⇒ checkExists(
-                "segment A in bottom up order",
-                srt(text = "segment", subjNote = "A", subjIndex = 1, asc = 
true),
-                usr(text = "A", id = "A"),
-                nlp(text = "in bottom up order", isStop = true)
-            ),
-            // `by` is redundant word here
-            _ ⇒ checkExists(
-                "segment A by in bottom up order",
-                srt(text = "segment", subjNote = "A", subjIndex = 1),
-                usr(text = "A", id = "A"),
-                nlp(text = "by"),
-                nlp(text = "in"),
-                nlp(text = "bottom"),
-                nlp(text = "up"),
-                nlp(text = "order")
-            ),
-            _ ⇒ checkExists(
-                "the segment the A the in bottom up the order the",
-                nlp(text = "the", isStop = true),
-                srt(text = "segment", subjNote = "A", subjIndex = 3, asc = 
true),
-                nlp(text = "the", isStop = true),
-                usr(text = "A", id = "A"),
-                nlp(text = "the in bottom up the order the", isStop = true)
-            ),
-            _ ⇒ checkExists(
-                "the segment the A the by bottom up the order the",
-                nlp(text = "the", isStop = true),
-                srt(text = "segment", subjNote = "A", subjIndex = 3, asc = 
true),
-                nlp(text = "the", isStop = true),
-                usr(text = "A", id = "A"),
-                nlp(text = "the by bottom up the order the", isStop = true)
-            ),
-            _ ⇒ checkExists(
-                "A classify",
-                usr(text = "A", id = "A"),
-                srt(text = "classify", subjNote = "A", subjIndex = 0)
-            ),
-            _ ⇒ checkAll(
-                "A B classify",
-                Seq(
-                    usr(text = "A B", id = "AB"),
-                    srt(text = "classify", subjNote = "AB", subjIndex = 0)
-                ),
-                Seq(
-                    usr(text = "A", id = "A"),
-                    usr(text = "B", id = "B"),
-                    srt(text = "classify", subjNotes = Seq("A", "B"), 
subjIndexes = Seq(0, 1))
-                )
-            ),
-            _ ⇒ checkAll(
-                "D classify",
-                Seq(
-                    usr(text = "D", id = "D1"),
-                    srt(text = "classify", subjNote = "D1", subjIndex = 0)
-                ),
-                Seq(
-                    usr(text = "D", id = "D2"),
-                    srt(text = "classify", subjNote = "D2", subjIndex = 0)
-                )
-            )
-        )
+//    /**
+//      *
+//      * @throws Exception
+//      */
+//    @Test
+//    def test(): Unit =
+//        runBatch(
+//            _ ⇒ checkExists(
+//                "sort A",
+//                srt(text = "sort", subjNote = "A", subjIndex = 1),
+//                usr("A", "A")
+//            ),
+//            _ ⇒ checkExists(
+//                "sort A by A",
+//                srt(text = "sort", subjNote = "A", subjIndex = 1, byNote = 
"A", byIndex = 3),
+//                usr(text = "A", id = "A"),
+//                nlp(text = "by", isStop = true),
+//                usr(text = "A", id = "A")
+//            ),
+//            _ ⇒ checkExists(
+//                "sort A, C by A, C",
+//                srt(text = "sort", subjNotes = Seq("A", "C"), subjIndexes = 
Seq(1, 3), byNotes = Seq("A", "C"), byIndexes = Seq(5, 7)),
+//                usr(text = "A", id = "A"),
+//                nlp(text = ",", isStop = true),
+//                usr(text = "C", id = "C"),
+//                nlp(text = "by", isStop = true),
+//                usr(text = "A", id = "A"),
+//                nlp(text = ",", isStop = true),
+//                usr(text = "C", id = "C")
+//            ),
+//            _ ⇒ checkExists(
+//                "sort A C by A C",
+//                srt(text = "sort", subjNotes = Seq("A", "C"), subjIndexes = 
Seq(1, 2), byNotes = Seq("A", "C"), byIndexes = Seq(4, 5)),
+//                usr(text = "A", id = "A"),
+//                usr(text = "C", id = "C"),
+//                nlp(text = "by", isStop = true),
+//                usr(text = "A", id = "A"),
+//                usr(text = "C", id = "C")
+//            ),
+//            _ ⇒ checkExists(
+//                "sort A B by A B",
+//                srt(text = "sort", subjNotes = Seq("A", "B"), subjIndexes = 
Seq(1, 2), byNotes = Seq("A", "B"), byIndexes = Seq(4, 5)),
+//                usr(text = "A", id = "A"),
+//                usr(text = "B", id = "B"),
+//                nlp(text = "by", isStop = true),
+//                usr(text = "A", id = "A"),
+//                usr(text = "B", id = "B")
+//            ),
+//            _ ⇒ checkExists(
+//                "sort A B by A B",
+//                srt(text = "sort", subjNote = "AB", subjIndex = 1, byNote = 
"AB", byIndex = 3),
+//                usr(text = "A B", id = "AB"),
+//                nlp(text = "by", isStop = true),
+//                usr(text = "A B", id = "AB")
+//            ),
+//            _ ⇒ checkExists(
+//                "A classify",
+//                usr(text = "A", id = "A"),
+//                srt(text = "classify", subjNote = "A", subjIndex = 0)
+//            ),
+//            _ ⇒ checkExists(
+//                "the A the classify",
+//                nlp(text = "the", isStop = true),
+//                usr(text = "A", id = "A"),
+//                nlp(text = "the", isStop = true),
+//                srt(text = "classify", subjNote = "A", subjIndex = 1)
+//            ),
+//            _ ⇒ checkExists(
+//                "segment A by top down",
+//                srt(text = "segment", subjNote = "A", subjIndex = 1, asc = 
false),
+//                usr(text = "A", id = "A"),
+//                nlp(text = "by top down", isStop = true)
+//            ),
+//            _ ⇒ checkExists(
+//                "segment A in bottom up order",
+//                srt(text = "segment", subjNote = "A", subjIndex = 1, asc = 
true),
+//                usr(text = "A", id = "A"),
+//                nlp(text = "in bottom up order", isStop = true)
+//            ),
+//            // `by` is redundant word here
+//            _ ⇒ checkExists(
+//                "segment A by in bottom up order",
+//                srt(text = "segment", subjNote = "A", subjIndex = 1),
+//                usr(text = "A", id = "A"),
+//                nlp(text = "by"),
+//                nlp(text = "in"),
+//                nlp(text = "bottom"),
+//                nlp(text = "up"),
+//                nlp(text = "order")
+//            ),
+//            _ ⇒ checkExists(
+//                "the segment the A the in bottom up the order the",
+//                nlp(text = "the", isStop = true),
+//                srt(text = "segment", subjNote = "A", subjIndex = 3, asc = 
true),
+//                nlp(text = "the", isStop = true),
+//                usr(text = "A", id = "A"),
+//                nlp(text = "the in bottom up the order the", isStop = true)
+//            ),
+//            _ ⇒ checkExists(
+//                "the segment the A the by bottom up the order the",
+//                nlp(text = "the", isStop = true),
+//                srt(text = "segment", subjNote = "A", subjIndex = 3, asc = 
true),
+//                nlp(text = "the", isStop = true),
+//                usr(text = "A", id = "A"),
+//                nlp(text = "the by bottom up the order the", isStop = true)
+//            ),
+//            _ ⇒ checkExists(
+//                "A classify",
+//                usr(text = "A", id = "A"),
+//                srt(text = "classify", subjNote = "A", subjIndex = 0)
+//            ),
+//            _ ⇒ checkAll(
+//                "A B classify",
+//                Seq(
+//                    usr(text = "A B", id = "AB"),
+//                    srt(text = "classify", subjNote = "AB", subjIndex = 0)
+//                ),
+//                Seq(
+//                    usr(text = "A", id = "A"),
+//                    usr(text = "B", id = "B"),
+//                    srt(text = "classify", subjNotes = Some(Seq("A", "B")), 
subjIndexes = Some(Seq(0, 1)))
+//                )
+//            ),
+//            _ ⇒ checkAll(
+//                "D classify",
+//                Seq(
+//                    usr(text = "D", id = "D1"),
+//                    srt(text = "classify", subjNote = "D1", subjIndex = 0)
+//                ),
+//                Seq(
+//                    usr(text = "D", id = "D2"),
+//                    srt(text = "classify", subjNote = "D2", subjIndex = 0)
+//                )
+//            ),
+//            _ ⇒ checkAll(
+//                "sort by A",
+//                Seq(
+//                    srt(text = "sort by", subjNotes = None, subjIndexes = 
None, byNotes = Some(Seq("A")), byIndexes = Some(Seq(1)), asc = None),
+//                    usr(text = "A", id = "A")
+//                )
+//            )
+//        )
 }

Reply via email to