///*
// * Licensed to the Apache Software Foundation (ASF) under one or more
// * contributor license agreements. See the NOTICE file distributed with
// * this work for additional information regarding copyright ownership.
// * The ASF licenses this file to You under the Apache License, Version 2.0
// * (the "License"); you may not use this file except in compliance with
// * the License. You may obtain a copy of the License at
// *
// * http://www.apache.org/licenses/LICENSE-2.0
// *
// * Unless required by applicable law or agreed to in writing, software
// * distributed under the License is distributed on an "AS IS" BASIS,
// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// * See the License for the specific language governing permissions and
// * limitations under the License.
// */
//package org.apache.commons.collections4.sequence;
//
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.List;
//import java.util.Random;
//
//import org.junit.After;
//import org.junit.Assert;
//import org.junit.Before;
//import org.junit.Test;
//
//public class SequencesComparatorTest {
//
// private List<String> before;
// private List<String> after;
// private int[] length;
//
// @Test
// public void testLength() {
// for (int i = 0; i < before.size(); ++i) {
// final SequencesComparator<Character> comparator = new SequencesComparator<Character>(sequence(before.get(i)), sequence(after.get(i)));
// Assert.assertEquals(length[i], comparator.getScript().getModifications());
// }
// }
//
// @Test
// public void testExecution() {
// final ExecutionVisitor<Character> ev = new ExecutionVisitor<Character>();
// for (int i = 0; i < before.size(); ++i) {
// ev.setList(sequence(before.get(i)));
// new SequencesComparator<Character>(sequence(before.get(i)), sequence(after.get(i))).getScript().visit(ev);
// Assert.assertEquals(after.get(i), ev.getString());
// }
// }
//
// @Test
// public void testMinimal() {
// final String[] shadokAlph = new String[]{new String("GA"), new String("BU"), new String("ZO"), new String("MEU")};
// final List<String> sentenceBefore = new ArrayList<String>();
// final List<String> sentenceAfter = new ArrayList<String>();
// sentenceBefore.add(shadokAlph[0]);
// sentenceBefore.add(shadokAlph[2]);
// sentenceBefore.add(shadokAlph[3]);
// sentenceBefore.add(shadokAlph[1]);
// sentenceBefore.add(shadokAlph[0]);
// sentenceBefore.add(shadokAlph[0]);
// sentenceBefore.add(shadokAlph[2]);
// sentenceBefore.add(shadokAlph[1]);
// sentenceBefore.add(shadokAlph[3]);
// sentenceBefore.add(shadokAlph[0]);
// sentenceBefore.add(shadokAlph[2]);
// sentenceBefore.add(shadokAlph[1]);
// sentenceBefore.add(shadokAlph[3]);
// sentenceBefore.add(shadokAlph[2]);
// sentenceBefore.add(shadokAlph[2]);
// sentenceBefore.add(shadokAlph[0]);
// sentenceBefore.add(shadokAlph[1]);
// sentenceBefore.add(shadokAlph[3]);
// sentenceBefore.add(shadokAlph[0]);
// sentenceBefore.add(shadokAlph[3]);
//
// final Random random = new Random(4564634237452342L);
//
// for (int nbCom = 0; nbCom <= 40; nbCom += 5) {
// sentenceAfter.clear();
// sentenceAfter.addAll(sentenceBefore);
// for (int i = 0; i < nbCom; i++) {
// if (random.nextInt(2) == 0) {
// sentenceAfter.add(random.nextInt(sentenceAfter.size() + 1), shadokAlph[random.nextInt(4)]);
// } else {
// sentenceAfter.remove(random.nextInt(sentenceAfter.size()));
// }
// }
//
// final SequencesComparator<String> comparator = new SequencesComparator<String>(sentenceBefore, sentenceAfter);
// Assert.assertTrue(comparator.getScript().getModifications() <= nbCom);
// }
// }
//
// @Test
// public void testShadok() {
// final int lgMax = 5;
// final String[] shadokAlph = new String[]{new String("GA"), new String("BU"), new String("ZO"), new String("MEU")};
// List<List<String>> shadokSentences = new ArrayList<List<String>>();
// for (int lg = 0; lg < lgMax; ++lg) {
// final List<List<String>> newTab = new ArrayList<List<String>>();
// newTab.add(new ArrayList<String>());
// for (final String element : shadokAlph) {
// for (final List<String> sentence : shadokSentences) {
// final List<String> newSentence = new ArrayList<String>(sentence);
// newSentence.add(element);
// newTab.add(newSentence);
// }
// }
// shadokSentences = newTab;
// }
//
// final ExecutionVisitor<String> ev = new ExecutionVisitor<String>();
//
// for (int i = 0; i < shadokSentences.size(); ++i) {
// for (List<String> shadokSentence : shadokSentences) {
// ev.setList(shadokSentences.get(i));
// new SequencesComparator<String>(shadokSentences.get(i), shadokSentence).getScript().visit(ev);
//
// final StringBuilder concat = new StringBuilder();
// for (final String s : shadokSentence) {
// concat.append(s);
// }
// Assert.assertEquals(concat.toString(), ev.getString());
// }
// }
// }
//
// private List<Character> sequence(final String string) {
// final List<Character> list = new ArrayList<Character>();
// for (int i = 0; i < string.length(); ++i) {
// list.add(new Character(string.charAt(i)));
// }
// return list;
// }
//
// private class ExecutionVisitor<T> implements CommandVisitor<T> {
//
// private List<T> v;
// private int index;
//
// public void setList(final List<T> array) {
// v = new ArrayList<T>(array);
// index = 0;
// }
//
// public void visitInsertCommand(final T object) {
// v.add(index++, object);
// }
//
// public void visitKeepCommand(final T object) {
// ++index;
// }
//
// public void visitDeleteCommand(final T object) {
// v.remove(index);
// }
//
// public String getString() {
// final StringBuilder buffer = new StringBuilder();
// for (final T c : v) {
// buffer.append(c);
// }
// return buffer.toString();
// }
//
// }
//
// @Before
// public void setUp() {
//
// before = Arrays.asList("bottle", "nematode knowledge", "", "aa", "prefixed string", "ABCABBA", "glop glop", "coq", "spider-man");
//
// after = Arrays.asList("noodle", "empty bottle", "", "C", "prefix", "CBABAC", "pas glop pas glop", "ane", "klingon");
//
// length = new int[]{6, 16, 0, 3, 9, 5, 8, 6, 13};
//
// }
//
// @After
// public void tearDown() {
// before = null;
// after = null;
// length = null;
// }
//
//}