Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

383
LINES

< > BotCompany Repo | #1017770 // Rule Testing [usually OK]

JavaX source code (desktop) [tags: use-pretranspiled] - run with: x30.jar

Download Jar. Libraryless. Click here for Pure Java version (11385L/67K).

!7

p-exp {
  bool newEngine = contains(args, "new");
  if (newEngine)
    BakedBot.defaultSnippetID = #1018381;

  if (contains(args, "bake"))
    if (newEngine)
      ai_bakeABot(BakedBot.defaultSnippetID, ll(#1018382));
    else
      bakeTheBot();
      
  if (contains(args, 'advanced)) advancedTests();
  
  callTests([[
    test1
    test2
    test3
    test4
    test5
    test4b
    test6
    test7
    test7b
    test7c
    test7d
    test7e
    test8
    test8b
    test8c
    test8d
    test9
    test9b
    test9c
    test10
    test11
    test12
    test13
    test13b
    test14
    test14b
    test14c
    test15
    test16
    test17
    test18
  ]]);
  consoleStatus(print("BASE TESTS DONE. DOING ADVANCED TESTS."));
  advancedTests();
  consoleStatus(print("BASE & ADVANCED TESTS OK"));
}

svoid advancedTests {
  callTests([[
  ]]);
}

svoid callTests(S s) {
  for (S test : tlftj(s)) {
    consoleStatus(test);
    callMC(test);
  }
}

svoid test1 {
  BakedBot bot = bakedBotWithRules([[
    inputContainsTokens("=>")
      && !inputStartsWith("!rule ")
      => output(Should I store this rule?)
  ]]);
  
  bot.setAuthorized(true);
  bot.check("bla => blubb", "Should I store this rule?");
  assertEqualsVerbose("", unnull(callAnswerMethod(bot, "bla <= blubb")));
  bot.check("!rule bla => bla", "Rule saved as *. Have 2 rules.");
}

svoid test2 {
  BakedBot bot = bakedBotWithRules([[
    input(what is $chicken $wire?) => output(a $wire made from $chicken)
  ]]);
  bot.check("what is pork sausage?", "a sausage made from pork");
}

svoid test3 {
  BakedBot bot = bakedBotWithRules([[
    input(What is $gertrude $afraid_of?)
      && fact($gertrude is $afraid_of $wolves)
      => output($wolves)
  ]]);
  bot.setList("Fact-to-fact rules", [[
    fact($gertrude is a $sheep)
      && fact($sheep are $afraid_of_wolves)
      => fact($gertrude is $afraid_of_wolves)
  ]]);
  bot.setList("Random Facts", [[
    sheep are afraid of wolves
    Cats are afraid of dogs.
    Mice are afraid of cats.
    klaus is a sheep
  ]]);

  setOptAll(bot.bot, ai_deriveFacts_debug := true, ai_applyFactToFactRules_debug := true);
  bot.answerAuthed("!deriveFacts");
  assertEqualsVerbose_match("Klaus is afraid of wolves", bot.getList("Derived facts"));
  pnl((L) call(bot.bot, 'mL_facts));
  call(bot.bot, 'setDebug, true);
  bot.check("What is Klaus afraid of", "Wolves");
}

svoid test4 {
  BakedBot bot = bakedBotWithRules([[
    i(what are the features)
    && allFacts($x is a feature|$x are a feature)
    => o($x1, $x2 [...] and $x_n)
  ]]);
  bot.setList("Random Facts", [[
    fun is a feature
    love is a feature
    drinks are a feature
    music is a feature
  ]]);
  bot.check("what are the features", "fun, love, drinks and music");
}

svoid test4b {
  BakedBot bot = bakedBotWithRules([[
    i(what is that one $feature again) && allFacts($x is a $feature|$x are a $feature) => o(do you mean $x1, $x2 [...] or $x_n?)
  ]]);
  bot.setList("Random Facts", [[
    fun is a feature
    love is a feature
    drinks are a feature
    music is a feature
  ]]);
  bot.check("what is that one feature again", "Do you mean fun, love, drinks or music?");
}

svoid test5 {
  S rule = [[
    [id: qohpbitnzaqfexmz] i(what is rule $x) => evalOutput(trim(getString(call(ai_context(), 'getRule, $x), 'originalText)))
  ]];

  BakedBot bot = bakedBotWithRules(rule);
  bot.check("what is rule qohpbitnzaqfexmz", trim(rule));
}

svoid test6 {
  BakedBot bot = bakedBotWithRules([[i($John is $in_the_playground) && $John != what => o(yo)]]);
  bot.check("bla is bla", "yo");
  bot.check("what is bla", null);
}

svoid test7 {
  bakedBotWithRules([[i(bla) && $a, $b = eval(joinWithComma(pair("x", "y"))) => o($b and $a)]]).check("bla", "y and x");
}

svoid test7b {
  bakedBotWithRules([[i(bla) && $a, $b = eval(joinWithComma(pair("bla bla", "this and that"))) => o($b and $a)]]).check("bla", "this and that and bla bla");
}

svoid test7c {
  bakedBotWithRules([[i(bla) && $a, $b = eval(pair("bla bla", "this and that")) => o($b and $a)]]).check("bla", "this and that and bla bla");
}

svoid test7d {
  bakedBotWithRules([[i(bla) && $a, $b, $c = eval(ll("let's", "do", "it")) => o($c $b $a)]]).check("bla", "it do let's");
}

svoid test7e {
  bakedBotWithRules([[i(bla) && $a, $b, $c = eval(litorderedset("let's", "do", "it")) => o($c $b $a)]]).check("bla", "it do let's");
}

sS mineralsRule = [[
  [id: zrpcdxxfqzgdkzof] fact(I saw $a_man $lick $minerals)
  && fact($_q_licked is past tense for $_q_lick)
  => newID($the_man)
  && fact($the_man was $a_man)
  && fact(I saw $the_man)
  && fact($the_man $licked $minerals)
]];

svoid test8 {
  bakedBotWithRules(mineralsRule).check("!factsFrom i saw a girl eat frogs", "No new facts found");
    // no result because there is no past tense for "eat"
}

svoid test8b {
  bakedBotWithRulesAndFacts(mineralsRule,
    [["licked" is past tense for "lick"]])
    .check("!factsFrom i saw a girl eat frogs", "No new facts found");
    // still no result because there is no past tense for "eat"
}

svoid test8c {
  BakedBot bot = bakedBotWithRulesAndFacts(mineralsRule,
    [["licked" is past tense for "lick"]]);
  setOptAll(bot.bot, ai_deriveFacts_debug := true, ai_applyFactToFactRules_debug := true);
  S s = bot.answer_verbose("!factsFrom [debug] i saw a girl lick walls");
  print("l(s)= " + l(s));
  assertNotNull(printStruct(jmatchDollarVars([[
    $x was a girl
    I saw $x
    $x $licked walls
  ]], s));
}

svoid test8d {
  bakedBotWithRulesAndFacts(joinWithEmptyLines(mineralsRule, [[
    [id: xxrmapvwhesonlyo] unresolvedFact($x is past tense for $_q_y)
    && eval(ai_isVar($x) && !ai_isVar($y))
    => output(What is the past tense of $_q_y?)
  ]]),
    [["licked" is past tense for "lick"]])
    .check("!askBackAboutFact i saw a girl eat frogs", [[What is the past tense of "eat"?]]);
}

// !deriveFacts with rules containing eval
svoid test9 {
  new BakedBot bot;
  bot.setList("Fact-to-fact rules", [[
    eval(1==1) => fact(ok)
  ]]);

  setOptAll(bot.bot, ai_deriveFacts_debug := true, ai_applyFactToFactRules_debug := true);
  bot.answerAuthed("!deriveFacts");
  assertEqualsVerbose_match("ok", bot.getList("Derived facts"));
}

// !deriveFacts with rules containing "$x in eval(...")
svoid test9b {
  new BakedBot bot;
  bot.setList("Fact-to-fact rules", [[
    $x in eval(ll("a", "b")) => fact($x is ok)
  ]]);

  setOptAll(bot.bot, ai_deriveFacts_debug := true, ai_applyFactToFactRules_debug := true);
  bot.answerAuthed("!deriveFacts");
  assertEqualsVerbose_match([[
    a is ok
    b is ok
  ]], bot.getList("Derived facts"));
}

// !deriveFacts with rules containing "$x, $y in eval(...")
svoid test9c {
  new BakedBot bot;
  bot.setList("Fact-to-fact rules", [[
    $x, $y in eval(ll(pair("a", "b"), pair("c", "d"))) => fact($x and $y are ok)
  ]]);

  setOptAll(bot.bot, ai_deriveFacts_debug := true, ai_applyFactToFactRules_debug := true);
  bot.answerAuthed("!deriveFacts");
  assertEqualsVerbose_match([[
    a and b are ok
    c and d are ok
  ]], bot.getList("Derived facts"));
}

svoid test10 {
  BakedBot bot = bakedBotWithRulesAndFacts([[
    i(is $love $nice) && eval(ai_isTrue($love + " is " + $nice)) => o(yo)
  ]], [[love is nice]]);
  bot.check("is love nice", "yo");
  bot.check("is love green", "");
}

svoid test11 {
  BakedBot bot = bakedBotWithRules([[
    i(yo $x) => o[javaTokNoQuotes](well: "$x")
  ]]);
  bot.check("yo test", [[well: "test"]]);
}

svoid test12 {
  BakedBot bot = bakedBotWithRules([[
    anyInput() => outputEval("You said " + ai_input())
  ]]);
  bot.check("horse", "You said horse");
}

svoid test13 {
  BakedBot bot = bakedBotWithRules([[
    input[re]([abc]{3}) => o(triggered)
  ]]);
  bot.check("aa", "");
  bot.check("aaa", "triggered");
  bot.check("bab", "triggered");
  bot.check("bdb", "");
  bot.check("xx ccc yy", "triggered");
}

svoid test13b {
  BakedBot bot = bakedBotWithRules([[
    input[re](das ist #ADJ_BILLIG#) => o(ja)
  ]]);
  bot.lists.setText("Ctx Macros (German)", [[
    ADJ_BILLIG = (_(billig|fast geschenkt|preiswert|(preis|)günstig)(|e|e[mnrs])_)
  ]]);
  
  bot.check("das ist fast geschenkt yo", "ja");
  bot.check("das ist billig", "ja");
  bot.check("das ist teuer", "");
}

svoid test14 {
  BakedBot bot = bakedBotWithRules([[
    phrase[words](hello $x)
    => o(i am $x)
  ]]);
  bot.useIterate(true);
  
  bot.check("hello you", "i am you");
  bot.check("yo hello guy yes", "i am guy");
}

svoid test14b {
  BakedBot bot = bakedBotWithRules([[
    phrase(hello $x)
    => o(i am $x)
  ]]);
  bot.useIterate(true);
  
  bot.check("hello you", "i am you");
  bot.check("yo hello guy yes", "i am guy");
}

svoid test14c {
  BakedBot bot = bakedBotWithRules([[
    phrase(alexa) && !phrase(stop)
    => o(nice)
  ]]);
  bot.useIterate(true);
  
  bot.debug(true);
  bot.check("alexa", "nice");
  bot.check("alexa stop", "");
}

svoid test15 {
  BakedBot bot = bakedBotWithRules([[
    i(test) => i(bla)
    
    i(bla) => o(ok)
  ]]);
  
  bot.check("test", "ok");
}

svoid test16 {
  BakedBot bot = bakedBotWithRules([[
    [id: jpltfkfmtbfiorxu] i(do i have any mails|do i have any mail|do i have any emails) => o(you have news from creator awards)

[id: fwobkcfddsldvrhb]
  followingUpOn(jpltfkfmtbfiorxu)
  && i(please open it|please open|open|open it|on the screen|on screen)
  => o("here you go sir")
  ]]);
  
  bot.check("do i have any mails", "you have news from creator awards");
  bot.check("open it", "here you go sir");
}

svoid test17 {
  BakedBot bot = bakedBotWithRules([[
    i(test) && evalTrue(print("hello")) => o(ok)
  ]]);
  bot.check("test", "ok");
}

svoid test18 {
  BakedBot bot = bakedBotWithRules([[
    [id: zaycfgkuplemvmvb] input[flexMatch](say $x) => o($x)
  ]]);
  bot.useIterate(true);
  bot.debug(true);
  setOpt(bot.bot, nlLogic_flexMatch_iterate_debug := true);
  bot.check("say", "");
  bot.check("say yo", "yo");
  bot.check("say yo yo", "yo yo");
  bot.check("say oki doki", "oki doki");
}

Author comment

Began life as a copy of #1017769

download  show line numbers  debug dex  old transpilations   

Travelled to 15 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, irmadwmeruwu, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt

No comments. add comment

Snippet ID: #1017770
Snippet name: Rule Testing [usually OK]
Eternal ID of this version: #1017770/90
Text MD5: dd284077c208ae884f37fc25509b5090
Transpilation MD5: e641afd362d90d84226dea84f6f0925f
Author: stefan
Category: javax / a.i.
Type: JavaX source code (desktop)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2018-09-30 02:54:18
Source code size: 10371 bytes / 383 lines
Pitched / IR pitched: No / No
Views / Downloads: 673 / 2581
Version history: 89 change(s)
Referenced in: [show references]