/** * Copyright (C) 2010-2017 Gordon Fraser, Andrea Arcuri and EvoSuite * contributors * * This file is part of EvoSuite. * * EvoSuite is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3.0 of the License, or * (at your option) any later version. * * EvoSuite is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with EvoSuite. If not, see <http://www.gnu.org/licenses/>. */ //! futname = Subject //NAME OF FUNCTION UNDER TEST //! mutation = false //SPECIFY MUTATION COVERAGE //! textout = true //WRITE INSTRUMENTED SUBJECT TO FILE //! maxchildren = 500000 //MAX LENGTH OF SEARCH //! totalpopsize = 100 //TOTAL SIZE OF POPULATIONS //! mutationpercent = 50 //REL FREQUENCY OF GENETIC MUTATION TO CROSSOVER //! samefitcountmax = 100 //NUMBER OF CONSECUTIVE TESTS IN A POP //THAT MUST HAVE THE SAME COST FOR POP TO BE STAGNANT //! verbose = false //PRINT MESSAGES SHOWING PROGRESS OF SEARCH //! showevery = 3000 //NUMBER OF CANDIDATE INPUTS GENERATED BETWEEN EACH SHOW //! numbins = 0 //GRANULARITY OF CANDIDATE INPUT HISTOGRAM, SET TO 0 TO NOT COLLECT STATS //! trialfirst = 1 //EACH TRIAL USES A DIFFERENT RANDOM SEED //! triallast = 1 //NUMBER OF TRIALS = triallast - trialfirst + 1 package scs; public class Pat { public static String Reverse(String s) { //RTN REVERSE OF s int slen = s.length(); if (slen < 2) { return s; } String result = ""; //var result : System.Text.StringBuilder = new System.Text.StringBuilder(slen); //var i : int = slen - 1; for (int i = slen - 1; i >= 0; i--) { //result.Append(s[i]); result += s.charAt(i); } //Console.WriteLine("s {0} revs {1}", s, result.ToString()); return result; } public int Subject(String txt , String pat ) { //SEARCH txt FOR FIRST OCCURRENCE OF pat OR REVERSE OF pat //IF pat (STRING OF LENGTH AT LEAST 3) OCCURS IN txt, RTN 1 //IF REVERSE OF pat OCCURS IN txt, RTN 2 //IF pat AND REVERSE OF pat OCCURS IN txt, RTN 3 //IF PALINDROME CONSISTING OF pat FOLLOWED BY REVERSE pat OCCURS IN txt, RTN 4 //IF PALINDROME CONSISTING OF REVERSE pat FOLLOWED pat OCCURS IN txt, RTN 5 int result = 0; int i = 0; int j = 0; int txtlen = txt.length(); int patlen = pat.length(); String possmatch = null; if (patlen > 2) { String patrev = Reverse(pat); for (i = 0; i <= txtlen - patlen; i++) { if (txt.charAt(i) == pat.charAt(0)) { possmatch = txt.substring(i, patlen); if (possmatch.equals(pat)) { //FOUND pat result = 1; //CHECK IF txt CONTAINS REVERSE pat for (j = i + patlen; j <= txtlen - patlen; j++) { if (txt.charAt(j) == patrev.charAt(0)) { possmatch = txt.substring(j, patlen); if (possmatch.equals(patrev)) { if (j == i + patlen) { return i;//4; } else { return i;//3; } } } } } } else if (txt.charAt(i) == patrev.charAt(0)) { possmatch = txt.substring(i, patlen); if (possmatch.equals(patrev)) { //FOUND pat REVERSE result = 2; //CHECK IF txt CONTAINS pat for (j = i + patlen; j <= txtlen - patlen; j++) { if (txt.charAt(j) == pat.charAt(0)) { possmatch = txt.substring(j, patlen); if (possmatch.equals(pat)) { if (j == i + patlen) { return i;//5; } else { return i;//3; } } } } } } } //pat NOR REVERSE FOUND } return result; } }