// Path: src/com/eyeline/mnp/HashMapStringStorage.java
// public class HashMapStringStorage implements Storage {
//     private Map<String, Mno> storage = new HashMap<>();
// 
//     @Override
//     public Mno lookup(String subscriber) {
//         if (subscriber == null) return null;
//         Mno result = storage.get(subscriber);
//         if (result!=null) {
//             return result;
//         }
//         StringBuilder mask = new StringBuilder(subscriber);
//         for (int i=subscriber.length()-1; i>=0; i--) {
//             mask.replace(i, i+1, Character.toString(Mask.WILDCARD));
//             result = storage.get(mask.toString());
//             if (result!=null) return result;
//         }
//         return null;
//     }
// 
//     @Override
//     public Mno put(Mask mask, Mno mno) {
//         if (mask == null || mno == null) return null;
//         return storage.put(mask.toString(), mno);
//     }
// 
//     @Override
//     public Mno remove(Mask mask) {
//         if (mask == null) return null;
//         return storage.remove(mask.toString());
//     }
// 
//     @Override
//     public void clear() {
//         storage = new HashMap<>();
//     }
// }
// 
// Path: src/com/eyeline/mnp/Storage.java
// public interface Storage {
//     /**
//      * Lookup MNO by phone number
//      * @param subscriber phone number
//      * @return mno if exists, otherwise null
//      */
//     public Mno lookup(String subscriber);
// 
//     /**
//      * Adds a new mask to mno in storage
//      * but only if mask is not exists
//      * @param mask new mask
//      * @param mno mno
//      * @return Mno – old value if present
//      */
//     public Mno put(Mask mask, Mno mno);
// 
//     /**
//      * remove mask from the storage
//      * @param mask mask
//      * @return old value
//      */
//     public Mno remove(Mask mask);
// 
//     /**
//      * clear the storage
//      */
//     public void clear();
// }


import com.eyeline.mnp.HashMapStringStorage;
import com.eyeline.mnp.Storage;
package com.eyeline.mnp.test;


/**
 * @author Chukanov
 */
public class HashMapStringStorageTest extends BaseStorageTest {
    @Override
    protected Storage build() {
// Path: src/com/eyeline/mnp/HashMapStringStorage.java
// public class HashMapStringStorage implements Storage {
//     private Map<String, Mno> storage = new HashMap<>();
// 
//     @Override
//     public Mno lookup(String subscriber) {
//         if (subscriber == null) return null;
//         Mno result = storage.get(subscriber);
//         if (result!=null) {
//             return result;
//         }
//         StringBuilder mask = new StringBuilder(subscriber);
//         for (int i=subscriber.length()-1; i>=0; i--) {
//             mask.replace(i, i+1, Character.toString(Mask.WILDCARD));
//             result = storage.get(mask.toString());
//             if (result!=null) return result;
//         }
//         return null;
//     }
// 
//     @Override
//     public Mno put(Mask mask, Mno mno) {
//         if (mask == null || mno == null) return null;
//         return storage.put(mask.toString(), mno);
//     }
// 
//     @Override
//     public Mno remove(Mask mask) {
//         if (mask == null) return null;
//         return storage.remove(mask.toString());
//     }
// 
//     @Override
//     public void clear() {
//         storage = new HashMap<>();
//     }
// }
// 
// Path: src/com/eyeline/mnp/Storage.java
// public interface Storage {
//     /**
//      * Lookup MNO by phone number
//      * @param subscriber phone number
//      * @return mno if exists, otherwise null
//      */
//     public Mno lookup(String subscriber);
// 
//     /**
//      * Adds a new mask to mno in storage
//      * but only if mask is not exists
//      * @param mask new mask
//      * @param mno mno
//      * @return Mno – old value if present
//      */
//     public Mno put(Mask mask, Mno mno);
// 
//     /**
//      * remove mask from the storage
//      * @param mask mask
//      * @return old value
//      */
//     public Mno remove(Mask mask);
// 
//     /**
//      * clear the storage
//      */
//     public void clear();
// }


// Path: test/com/eyeline/mnp/test/HashMapStringStorageTest.java
import com.eyeline.mnp.HashMapStringStorage;
import com.eyeline.mnp.Storage;

package com.eyeline.mnp.test;


/**
 * @author Chukanov
 */
public class HashMapStringStorageTest extends BaseStorageTest {
    @Override
    protected Storage build() {
        return new HashMapStringStorage();