Source: org/terraswarm/accessor/accessors/web/node_modules/@accessors-modules/ontology/parserTester.js

// Code for testing the ontologyLogicParser.js module. See README.txt for instructions
// on how to generate the module.
//
// Copyright (c) 2015-2017 The Regents of the University of California.
// All rights reserved.
//
// Permission is hereby granted, without written agreement and without
// license or royalty fees, to use, copy, modify, and distribute this
// software and its documentation for any purpose, provided that the above
// copyright notice and the following two paragraphs appear in all copies
// of this software.
//
// IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
// FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
// ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
// THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
// SUCH DAMAGE.
//
// THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
// PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
// CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
// ENHANCEMENTS, OR MODIFICATIONS.
//

/** 
 * Code for testing the ontologyLogicParser.js module. See README.txt for instructions
 * on how to generate the module. Run the test by running node parserTester.js.
 *
 * In the future this will be integrated into the accessors testing infratructure,
 * but for now, this is too much a work in progress.
 * 
 *  @module @accessors-hosts/common/modules/ontology
 *  @author Matt Weber and Chadlia Jerad
 *  @version $$Id: ontologyChecker.js 2017-06-12 11:11:30Z chadlia.jerad $$   
 */

'use strict';

var parser = require('./ontologyLogicParser.js');
console.log('past require parser');
var relations = require('./relations');
console.log('past requireRelations in parsertester');
var relats = new relations.Relations();
console.log(JSON.stringify(relats));

console.log('past constructor in parsertester');
var parseTest = (function (){
  var counter = 0;
  return function (input, expectedResult){
    counter = counter + 1;
    console.log('#' + counter + ' Testing input: "' + input + '"');
    var actualResult;
    try{
      actualResult = parser.parse(input, {"relations": relats });
    } catch(e) {
      if(expectedResult == "error"){
        console.log("Test successful! Result matches: " + expectedResult);
        return true;
      }
      console.log(e);
      return false;
    }
    if(JSON.stringify(actualResult) != JSON.stringify(expectedResult)){
      console.log("**Test unsuccessful! Result is: " + JSON.stringify(actualResult));
      console.log("expected result was: " + JSON.stringify(expectedResult));
      return false;
    } else{
      console.log("Test successful! Result matches: " +  JSON.stringify(expectedResult));
      return true;
    }
  }
})();

var allTestsSuccessful = true;

relats.loadOntologies( 
  function(){
    allTestsSuccessful = parseTest('true', true) && allTestsSuccessful; 
    allTestsSuccessful = parseTest('false', false) && allTestsSuccessful; 
    allTestsSuccessful = parseTest('(true)', true) && allTestsSuccessful; 
    allTestsSuccessful = parseTest('   (     true      )', true) && allTestsSuccessful; 
    allTestsSuccessful = parseTest('   !(     true      )', false) && allTestsSuccessful; 
    allTestsSuccessful = parseTest('   (  !   true      )', false) && allTestsSuccessful; 
    allTestsSuccessful = parseTest('   (  !   true      ', 'error') && allTestsSuccessful; 
    allTestsSuccessful = parseTest('   (     true !)     ', 'error') && allTestsSuccessful; 
    allTestsSuccessful = parseTest('   (     true ) !    ', 'error') && allTestsSuccessful; 
    allTestsSuccessful = parseTest('   !(!     true )    ', true) && allTestsSuccessful; 
    allTestsSuccessful = parseTest(' ! ! ! !(!     true )    ', false) && allTestsSuccessful; 
    allTestsSuccessful = parseTest(' ! ! ! !(!     false )    ', true) && allTestsSuccessful; 
    allTestsSuccessful = parseTest(' !, ! ! !(!     false )    ', 'error') && allTestsSuccessful; 
    allTestsSuccessful = parseTest(' ! () ! ! !(!     false )    ', 'error') && allTestsSuccessful; 
    allTestsSuccessful = parseTest(' ! () ! ! !(!     false )    ', 'error') && allTestsSuccessful; 
    allTestsSuccessful = parseTest(' ! ! ! !(!     false ())    ', 'error') && allTestsSuccessful;
    allTestsSuccessful = parseTest('true && true', true) && allTestsSuccessful;
    allTestsSuccessful = parseTest('true && true && true', true) && allTestsSuccessful;
    allTestsSuccessful = parseTest('true && true && false', false) && allTestsSuccessful;
    allTestsSuccessful = parseTest('true && true || false', true) && allTestsSuccessful;
    allTestsSuccessful = parseTest('(true && true) || false', true) && allTestsSuccessful;
    allTestsSuccessful = parseTest('(true && (true || false))', true) && allTestsSuccessful;
    allTestsSuccessful = parseTest('true && (false || true)', true) && allTestsSuccessful;
    allTestsSuccessful = parseTest('false || true && false', false) && allTestsSuccessful;
    allTestsSuccessful = parseTest('false -> true', true) && allTestsSuccessful;
    allTestsSuccessful = parseTest('false -> (true && false)', true) && allTestsSuccessful;
    allTestsSuccessful = parseTest('true -> (true && false)', false) && allTestsSuccessful;
    allTestsSuccessful = parseTest('true -> true && false', false) && allTestsSuccessful;
    allTestsSuccessful = parseTest('false -> false || false', true) && allTestsSuccessful;
    allTestsSuccessful = parseTest('true -> (false || false)', false) && allTestsSuccessful;
    allTestsSuccessful = parseTest('false -> false -> false', false) && allTestsSuccessful; // test for left associativity
    allTestsSuccessful = parseTest('false -> (false -> false -> false -> false)', true) && allTestsSuccessful; // test for left associativity
    allTestsSuccessful = parseTest('false -> (false -> (false && false) -> false)', true) && allTestsSuccessful; // test for left associativity
    allTestsSuccessful = parseTest('false -> false -> false -> false -> false', false) && allTestsSuccessful; // test for left associativity
    allTestsSuccessful = parseTest('false -> (false -> false)', true) && allTestsSuccessful;
    allTestsSuccessful = parseTest('(false -> false) -> false', false) && allTestsSuccessful;
    // allTestsSuccessful = parseTest('isA("human" , "entity" )', true) && allTestsSuccessful;
    // allTestsSuccessful = parseTest('isA("nonentity" , "food" )', false) && allTestsSuccessful;
    // allTestsSuccessful = parseTest('isA("nonentity" , "food" ) -> hasA("watch" , "everything" )', true) && allTestsSuccessful;
    // allTestsSuccessful = parseTest('isA(,"nonentity", "food" )', 'error') && allTestsSuccessful;
    allTestsSuccessful = parseTest('true()', 'error') && allTestsSuccessful;
    allTestsSuccessful = parseTest('true(false)', 'error') && allTestsSuccessful;
    // allTestsSuccessful = parseTest('IsA', 'error') && allTestsSuccessful;
    // allTestsSuccessful = parseTest('IsAt("human" , "entity" )', 'error') && allTestsSuccessful;
    //allTestsSuccessful = parseTest('closed("me", "door")', false) && allTestsSuccessful;
    //allTestsSuccessful = parseTest('closed("me_", "_door")', false) && allTestsSuccessful;
    allTestsSuccessful = parseTest('getType("me")', 'string') && allTestsSuccessful;
    allTestsSuccessful = parseTest('getType(10)', 'number') && allTestsSuccessful;
    allTestsSuccessful = parseTest('getType(10.01)', 'number') && allTestsSuccessful;
    allTestsSuccessful = parseTest('isA("hueBulb" , "light" )', true) && allTestsSuccessful;
    allTestsSuccessful = parseTest('isA("hueBulb" , "light" ) || false', true) && allTestsSuccessful;
    allTestsSuccessful = parseTest('isA("hueBulb" , "light" ) || true', true) && allTestsSuccessful;
    allTestsSuccessful = parseTest('isA("hueBulb" , "light" ) -> true', true) && allTestsSuccessful;
    allTestsSuccessful = parseTest('false -> isA("hueBulb" , "light" )', true) && allTestsSuccessful;
    allTestsSuccessful = parseTest('true -> isA("hueBulb" , "light" )', true) && allTestsSuccessful;
    allTestsSuccessful = parseTest('true && isA("hueBulb" , "light" )', true) && allTestsSuccessful;
    allTestsSuccessful = parseTest('false && isA("hueBulb" , "light" )', false) && allTestsSuccessful;
    allTestsSuccessful = parseTest('undefined && isA("hueBulb" , "light" )', undefined) && allTestsSuccessful;
    allTestsSuccessful = parseTest('undefined', undefined) && allTestsSuccessful;
    allTestsSuccessful = parseTest('undefined -> undefined -> undefined', undefined) && allTestsSuccessful;
    allTestsSuccessful = parseTest('! undefined', undefined) && allTestsSuccessful;
    allTestsSuccessful = parseTest('x', 'error') && allTestsSuccessful;
    allTestsSuccessful = parseTest('Ex : x : x = [true, false]', true) && allTestsSuccessful;
    allTestsSuccessful = parseTest('Ax : x : x = [true, false]', false) && allTestsSuccessful;
    allTestsSuccessful = parseTest('Ax : x || true : x = [true, false]', true) && allTestsSuccessful;
    allTestsSuccessful = parseTest('Ax : x && true : x = [true, false]', false) && allTestsSuccessful;
    allTestsSuccessful = parseTest('Qx : x && true : x = [true, false]', [{"x" : true}]) && allTestsSuccessful;
    allTestsSuccessful = parseTest('Qx : !x && true : x = [true, false]', [{"x" : false}]) && allTestsSuccessful;
    allTestsSuccessful = parseTest('Qx Qy : x && y : x = [true, false], y = [true, false]', [{"x" : true, "y": true}]) && allTestsSuccessful;
    allTestsSuccessful = parseTest('Qx Qy : x || y : x = [true, false], y = [true, false]', [{"x":true,"y":true},{"x":true,"y":false},{"x":false,"y":true}]) && allTestsSuccessful;
    allTestsSuccessful = parseTest('Qx Qy : x || y : x = [ undefined], y = [true, false]', 'error') && allTestsSuccessful;
    allTestsSuccessful = parseTest('Qx Qy : x || y : x = [ ], y = [true, false]', 'error') && allTestsSuccessful;
    allTestsSuccessful = parseTest('Ex Qy Qz: x -> y || z : x = [true, false ], y = [true, false], z = [true, false]', [{"x":true,"y":true,"z":true},{"x":true,"y":true,"z":false},{"x":true,"y":false,"z":true}]) && allTestsSuccessful;
    allTestsSuccessful = parseTest('Ax Az Qy: y && (y -> x || z) : x = [true, false ], y = [true, false], z = [true, false]', false) && allTestsSuccessful;
    allTestsSuccessful = parseTest('Ax Az Ey: y && (y -> x || z) : x = [true, false ], y = [true, false], z = [true, false]', false) && allTestsSuccessful;
    allTestsSuccessful = parseTest('close("a", "b", 10.0)', true) && allTestsSuccessful;
    allTestsSuccessful = parseTest('close("a", "b", 0.1)', false) && allTestsSuccessful;
    //allTestsSuccessful = parseTest('Ex : isA( x , "light") : x = [ "door", "hueBulb"]', true) && allTestsSuccessful;
    //allTestsSuccessful = parseTest('isA( "door" , "light")', undefined) && allTestsSuccessful;
    //allTestsSuccessful = parseTest('isA( "hueBulb" , "light")', undefined) && allTestsSuccessful;

    //allTestsSuccessful = parseTest('Ax : isA( x , "light") : x = [ "door", "hueBulb"]', false) && allTestsSuccessful;
    //allTestsSuccessful = parseTest('Qx : isA( x , "light") : x = [ "door", "hueBulb"]', [ {"x":"hueBulb"} ]) && allTestsSuccessful;
    //allTestsSuccessful = parseTest(': : x = [true, false]', true) && allTestsSuccessful;

    //allTestsSuccessful = parseTest('Ex Ey Ez: x && y && z : x = [true, false, undefined, 7], y = [true, false], z = [true, false, undefined]', true) && allTestsSuccessful;
    //allTestsSuccessful = parseTest('Ex Ey Ez: x && y || z : x = [true, false, undefined, 7], y = [true, false], z = [true, false, undefined]', true) && allTestsSuccessful;


    //allTestsSuccessful = parseTest('Qx . x : x = [true, false]', {"x" = true}) && allTestsSuccessful;
    //allTestsSuccessful = parseTest('Qx . x : x = [true, false]', [true]) && allTestsSuccessful;
    console.log('######################################################')
    console.log("Do all tests pass? " + allTestsSuccessful);

  }
);


//console.log( parser.parse('Qx : x && true : x = [true, false]') );

/*
//console.log("true");
var result = parser.parse('true');
console.log(result);

var result = parser.parse('(! true)');
console.log(result);

var result = parser.parse('(! false)');
console.log(result);

var result = parser.parse('word()');
console.log(result);

var result = parser.parse('word( var1)');
console.log(result);

var result = parser.parse('word( var1, var2)');
console.log(result);

var result = parser.parse('word( var1, var2, var3)');
console.log(result);

var result = parser.parse('! word( var1, var2, var3)');
console.log(result);
*/
/*
var apples = ["item1", "item2", "item3"];
apples.unshift("item9000");
console.log(apples);
*/