public void Test_Problem_99_Tutoring()
        {
            HCIReasoner.TutorMode = true;
            var tutor = new HCIReasoner();
            tutor.InitProblem(99);

            //drag input
            const string fact1 = "1+2+3=";
            var queryExpr = tutor.HCILoad(fact1, null, true) as AGQueryExpr;
            Assert.NotNull(queryExpr);

            //In tutor mode, it does not matter if the user selects 
            //query knowledge or not.
            //HCIReasoner.Instance.QueriedKnowledge = queryExpr;
            //query its internal procedures
            string message;
            object output;

            QueryFeedbackState state = tutor.Query(null, out message, out output);
            Assert.True(state == QueryFeedbackState.TutorQueryProcessedHint);

            state = tutor.Query(null, out message, out output);
            Assert.True(state == QueryFeedbackState.TutorQueryProcessedAnswer);

            state = tutor.Query(null, out message, out output);
            Assert.True(state == QueryFeedbackState.TutorQueryProcessedHint);

            state = tutor.Query(null, out message, out output);
            Assert.True(state == QueryFeedbackState.TutorQueryProcessedAnswer);

            state = tutor.Query(null, out message, out output);
            Assert.True(state == QueryFeedbackState.TutorQueryEnded);


            const string userFact = "1+5=6";
            var userEqExpr = tutor.HCILoad(userFact) as AGEquationExpr;
            Assert.NotNull(userEqExpr);

            state = tutor.Query(userEqExpr, out message, out output);
            Assert.True(state == QueryFeedbackState.TutorQueryProcessedVerify);
            Assert.NotNull(message);
            Assert.True(message.Equals(AGTutorMessage.VerifyCorrect));

            const string userFact1 = "5+1=6";
            var userEqExpr1 = tutor.HCILoad(userFact1) as AGEquationExpr;
            Assert.NotNull(userEqExpr1);

            state = tutor.Query(userEqExpr1, out message, out output);
            Assert.True(state == QueryFeedbackState.TutorQueryProcessedVerify);
            Assert.NotNull(message);
            Assert.True(message.Equals(AGTutorMessage.VerifyCorrect));

            const string userFact2 = "3+4=6";
            var userEqExpr2 = tutor.HCILoad(userFact2) as AGEquationExpr;
            Assert.NotNull(userEqExpr2);

            state = tutor.Query(userEqExpr2, out message, out output);
            Assert.True(state == QueryFeedbackState.TutorQueryProcessedVerify);
            Assert.NotNull(message);
            Assert.True(message.Equals(AGTutorMessage.VerifyWrong));

            const string userFact3 = "x-x+6=6";
            var userEqExpr3 = tutor.HCILoad(userFact3) as AGEquationExpr;
            Assert.NotNull(userEqExpr3);

            state = tutor.Query(userEqExpr3, out message, out output);
            Assert.True(state == QueryFeedbackState.TutorQueryProcessedVerify);
            Assert.NotNull(message);
            Assert.True(message.Equals(AGTutorMessage.VerifyCorrect));
        }
        public void Test_Problem_99_Demonstration()
        {
            //Retrieve authoring behavior graph 
            const int problemIndex = 99;

            var tutor = new HCIReasoner();

            bool result = tutor.InitProblem(problemIndex);
            Assert.True(result);
            //have the user authoring data
            Assert.True(tutor.UserGraph.Nodes.Count == 2);
            Assert.Null(tutor.ObjectGraph);

            HCIReasoner.TutorMode = false;
            tutor.InitMode();
			///////////////////////////////////////////////////////

            const string fact1 = "1+2+3=";
            var queryExpr = tutor.HCILoad(fact1) as AGQueryExpr;
            Assert.NotNull(queryExpr);
            queryExpr.RetrieveRenderKnowledge();
            Assert.True(queryExpr.RenderKnowledge.Count == 1);

            var agEquationExpr = queryExpr.RenderKnowledge[0] as AGEquationExpr;
            Assert.True(agEquationExpr != null);
            agEquationExpr.IsSelected = true; // user select knowledge answer

            //select query knowledge
            tutor.QueriedKnowledge = queryExpr;
            Assert.NotNull(tutor.ObjectGraph);
            Assert.True(tutor.ObjectGraph.Nodes.Count == 2);

            //query its internal procedures
            string message;
            object output;
            QueryFeedbackState state = tutor.Query(null, out message, out output);
            Assert.NotNull(output);
            Assert.True(state == QueryFeedbackState.DemonQueryStarted);
            Assert.True(tutor.TraceLeftCount == 2);

            state = tutor.Query(null, out message, out output);
            Assert.True(state == QueryFeedbackState.DemonQueryProcessed);
            Assert.True(tutor.TraceLeftCount == 1);

            ////////////////////////////////////////////////////////////////////

            const string userFact00 = "3+3";
            var userEqExpr00 = tutor.HCILoad(userFact00, null, true) as IKnowledge;
            Assert.NotNull(userEqExpr00);
            state = tutor.Query(userEqExpr00, out message, out output);
            Assert.True(state == QueryFeedbackState.DemonQueryVerify);
            Assert.NotNull(message);
            Assert.True(message.Equals(AGTutorMessage.VerifyCorrect));

            const string userFact0 = "5+1=6";
            var userEqExpr0 = tutor.HCILoad(userFact0, null, true) as IKnowledge;
            Assert.NotNull(userEqExpr0);
            state = tutor.Query(userEqExpr0, out message, out output);
            Assert.True(state == QueryFeedbackState.DemonQueryVerify);
            Assert.NotNull(message);
            Assert.True(message.Equals(AGTutorMessage.VerifyWrong));

/*            const string userFact1 = "6";
            var userEqExpr1 = tutor.HCILoad(userFact1, null, true) as IKnowledge;
            Assert.NotNull(userEqExpr1);
            state = tutor.Query(userEqExpr1, out message, out output);
            Assert.True(state == QueryFeedbackState.DemonQueryVerify);
            Assert.NotNull(message);
            Assert.True(message.Equals(AGTutorMessage.VerifyCorrect));*/

           /* const string userFact = "3+3=6";
            var userEqExpr = HCIReasoner.Instance.HCILoad(userFact, null, userInput) as IKnowledge;
            Assert.NotNull(userEqExpr);

            state = HCIReasoner.Instance.Query(userEqExpr, out message, out output);
            Assert.True(state == QueryFeedbackState.DemonQueryVerify);
            Assert.NotNull(message);
            Assert.True(message.Equals(AGTutorMessage.VerifyCorrect));

            state = HCIReasoner.Instance.Query(null, out message, out output);
            Assert.True(state == QueryFeedbackState.DemonQueryProcessed);

            state = HCIReasoner.Instance.Query(null, out message, out output);
            Assert.True(state == QueryFeedbackState.DemonQueryEnded);

            state = HCIReasoner.Instance.Query(null, out message, out output);
            Assert.True(state == QueryFeedbackState.DemonQueryEnded);
            Assert.Null(output);

            state = HCIReasoner.Instance.Query(userEqExpr, out message, out output);
            Assert.True(state == QueryFeedbackState.DemonQueryVerify);
            Assert.Null(output);

            state = HCIReasoner.Instance.Query(null, out message, out output);
            Assert.True(state == QueryFeedbackState.DemonQueryProcessed);*/

        }