private PojoTester(Mode mode) {
		
		this.mode = mode;
        FixtureDatumFactory<Boolean> booleanDatumFactory = new FixtureDatumFactory<Boolean>(Boolean.class) {
			public Boolean getNext() {
				return counter.getAndIncrement() == 0;
			}
		};
		fixtureDataByType.put(boolean.class, booleanDatumFactory);
		fixtureDataByType.put(Boolean.class, booleanDatumFactory);

		
		FixtureDatumFactory<Byte> byteDatumFactory = new FixtureDatumFactory<Byte>(Byte.class) {
			public Byte getNext() {
				return (byte) counter.getAndIncrement();
			}
		};
		fixtureDataByType.put(byte.class, byteDatumFactory);
		fixtureDataByType.put(Byte.class, byteDatumFactory);
		
		
		FixtureDatumFactory<Short> shortDatumFactory = new FixtureDatumFactory<Short>(Short.class) {
			public Short getNext() {
				return (short) counter.getAndIncrement();
			}
		};
		fixtureDataByType.put(short.class, shortDatumFactory);
		fixtureDataByType.put(Short.class, shortDatumFactory);
		
		
		FixtureDatumFactory<Character> charDatumFactory = new FixtureDatumFactory<Character>(Character.class) {
			public Character getNext() {
				return (char) counter.getAndIncrement();
			}
		};
		fixtureDataByType.put(char.class, charDatumFactory);
		fixtureDataByType.put(Character.class, charDatumFactory);
		
		
		FixtureDatumFactory<Integer> intDatumFactory = new FixtureDatumFactory<Integer>(Integer.class) {
			public Integer getNext() {
				return counter.getAndIncrement();
			}
		};
		fixtureDataByType.put(int.class, intDatumFactory);
		fixtureDataByType.put(Integer.class, intDatumFactory);
		
		
		FixtureDatumFactory<Long> longDatumFactory = new FixtureDatumFactory<Long>(Long.class) {
			public Long getNext() {
				return (long) counter.getAndIncrement();
			}
		};
		fixtureDataByType.put(long.class, longDatumFactory);
		fixtureDataByType.put(Long.class, longDatumFactory);
		
		
		FixtureDatumFactory<Float> floatDatumFactory = new FixtureDatumFactory<Float>(Float.class) {
			public Float getNext() {
				return new Float(counter.getAndIncrement());
			}
		};
		fixtureDataByType.put(float.class, floatDatumFactory);
		fixtureDataByType.put(Float.class, floatDatumFactory);
		
		
		FixtureDatumFactory<Double> doubleDatumFactory = new FixtureDatumFactory<Double>(Double.class) {
			public Double getNext() {
				return new Double(counter.getAndIncrement());
			}
		};
		fixtureDataByType.put(double.class, doubleDatumFactory);
		fixtureDataByType.put(Double.class, doubleDatumFactory);

		fixtureDataByType.put(String.class, new FixtureDatumFactory<String>(String.class) {
			public String getNext() {
				return "string" + counter.getAndIncrement();
			}
		});

		fixtureDataByType.put(BigDecimal.class, new FixtureDatumFactory<BigDecimal>(BigDecimal.class) {
			public BigDecimal getNext() {
				return new BigDecimal(counter.getAndIncrement());
			}
		});

		fixtureDataByType.put(BigInteger.class, new FixtureDatumFactory<BigInteger>(BigInteger.class) {
			public BigInteger getNext() {
				return BigInteger.valueOf(counter.getAndIncrement());
			}
		});

		fixtureDataByType.put(Date.class, new FixtureDatumFactory<Date>(Date.class) {
			public Date getNext() {
				return new Date(counter.getAndIncrement());
			}
		});
		
		fixtureDataByType.put(Timestamp.class, new FixtureDatumFactory<Timestamp>(Timestamp.class) {
			public Timestamp getNext() {
				return new Timestamp(counter.getAndIncrement());
			}
		});
		
		fixtureDataByType.put(Pattern.class, new FixtureDatumFactory<Pattern>(Pattern.class) {
			public Pattern getNext() {
				return Pattern.compile("p" + counter.getAndIncrement());
			}
		});
		
		fixtureDataByType.put(File.class, new FixtureDatumFactory<File>(File.class) {
			public File getNext() {
				return new File("file" + counter.getAndIncrement());
			}
		});

		FixtureDatumFactory<List<?>> listDatumFactory = new FixtureDatumFactory<List<?>>() {
			public List<?> getNext() {
				final List<String> list = new ArrayList<String>();
				list.add("element" + counter.getAndIncrement());
				list.add("element" + counter.getAndIncrement());
				list.add("element" + counter.getAndIncrement());
				return list;
			}
		};
		fixtureDataByType.put(Iterable.class, listDatumFactory);
		fixtureDataByType.put(Collection.class, listDatumFactory);
		fixtureDataByType.put(List.class, listDatumFactory);

		fixtureDataByType.put(Set.class, new FixtureDatumFactory<Set<?>>() {
			public Set<?> getNext() {
				final Set<String> list = new HashSet<String>();
				list.add("element" + counter.getAndIncrement());
				list.add("element" + counter.getAndIncrement());
				list.add("element" + counter.getAndIncrement());
				return list;
			}
		});
		fixtureDataByType.put(SortedSet.class, new FixtureDatumFactory<SortedSet<?>>() {
		    public SortedSet<?> getNext() {
		        final SortedSet<String> list = new TreeSet<String>();
		        list.add("element" + counter.getAndIncrement());
		        list.add("element" + counter.getAndIncrement());
		        list.add("element" + counter.getAndIncrement());
		        return list;
		    }
		});
	}