#!/bin/bash

doContain() {
    reqsubstr="$1"
    shift
    string="$@"
    if [ -z "${string##*$reqsubstr*}" ] ;then
        # echo "String '$string' contain substring: '$reqsubstr'.";
        true
      else
        # echo "String '$string' don't contain substring: '$reqsubstr'."
	false
    fi
}

export -f doContain

nst='a=two;b=onetwothree; x=100000; while [ $x -gt 0 ]; do TEST ; x=$(($x-1)); done'
nst='a=nonesvch;
b=nosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatch;
for((x=0; x<10000; ++x)); do TEST && { echo FAIL; exit 127; }; done'
:<<\=cut
for TEST in '[[ $b =~ $a ]]' '[ "${b/$a//}" = "$b" ]' '[[ $b == *$a* ]]' \
        'case $b in *$a*):;;esac' 'doContain "$a" "$b"'; do
    printf '%s ' "$TEST"
    /usr/bin/time bash -c "${nst/TEST/$TEST}"
done
=cut
for TEST in '[[ $b =~ $a ]]' '! [ "${b/$a//}" = "$b" ]' '[[ $b == *$a* ]]' \
        'case $b in *$a*):;; *) false;; esac' 'doContain "$b" "$a"'; do
    printf '%s ' "$TEST" >&2
    time bash -c "${nst/TEST/$TEST}"
done
