/* * Copyright (c) 2010 Mysema Ltd. * All rights reserved. * */ package com.mysema.rdfbean.rdb; import java.io.UnsupportedEncodingException; import java.security.NoSuchAlgorithmException; import java.util.HashMap; import java.util.HashSet; import java.util.Locale; import java.util.Map; import java.util.Set; import org.junit.Test; import com.mysema.rdfbean.model.BID; import com.mysema.rdfbean.model.LIT; import com.mysema.rdfbean.model.NODE; import com.mysema.rdfbean.model.Nodes; import com.mysema.rdfbean.model.RDF; import com.mysema.rdfbean.model.XSD; public class MD5IdFactoryTest { private final IdFactory idFactory = new MD5IdFactory(); @Test public void Node() throws UnsupportedEncodingException, NoSuchAlgorithmException { Map<Long, NODE> seen = new HashMap<Long, NODE>(); Set<NODE> nodes = new HashSet<NODE>(); // UID nodes.addAll(Nodes.all); // BID nodes.add(new BID(RDF.type.getValue())); nodes.add(new BID("1")); // LIT nodes.add(new LIT(RDF.type.getValue())); nodes.add(new LIT("1", Locale.ENGLISH)); nodes.add(new LIT("1", XSD.stringType)); nodes.add(new LIT("1", XSD.integerType)); nodes.add(new LIT("true", XSD.booleanType)); nodes.add(new LIT("false", XSD.booleanType)); nodes.add(new LIT("1" + Locale.ENGLISH)); nodes.add(new LIT("1" + XSD.stringType)); for (int i = -128; i < 128; i++) { String str = String.valueOf(i); nodes.add(new LIT(str, XSD.byteType)); nodes.add(new LIT(str, XSD.intType)); nodes.add(new LIT(str, XSD.longType)); nodes.add(new LIT(str + ".0", XSD.doubleType)); nodes.add(new LIT(str + ".0", XSD.floatType)); } for (int i = 0; i < 10000; i++) { String str = String.valueOf(i); nodes.add(new LIT(str, XSD.intType)); nodes.add(new LIT("-" + str, XSD.intType)); nodes.add(new LIT(str, XSD.longType)); nodes.add(new LIT("-" + str, XSD.longType)); for (int j = 0; j < 10; j++) { nodes.add(new LIT(str + "." + j, XSD.doubleType)); nodes.add(new LIT("-" + str + "." + j, XSD.doubleType)); nodes.add(new LIT(str + "." + j, XSD.floatType)); nodes.add(new LIT("-" + str + "." + j, XSD.floatType)); } } long start = System.currentTimeMillis(); for (NODE node : nodes) { Long id = idFactory.getId(node); if (seen.containsKey(id)) { throw new IllegalStateException("Clash : " + node + " and " + seen.get(id)); } seen.put(id, node); } System.out.println(System.currentTimeMillis() - start); } @Test public void Lang() { Set<Integer> seen = new HashSet<Integer>(); for (Locale locale : Locale.getAvailableLocales()) { Integer id = idFactory.getId(locale); if (seen.contains(id)) { throw new IllegalStateException(id + " already used"); } seen.add(id); } } @Test public void testMask() { MD5IdFactory idFactory = new MD5IdFactory(); for (int i = -128; i < 128; i++) { int val1 = idFactory.mask((byte) i, 0); int val2 = idFactory.mask((byte) i, 1); int val3 = idFactory.mask((byte) i, 2); int val4 = idFactory.mask((byte) i, 3); System.out.println(i + " : " + val1 + " " + val2 + " " + val3 + " " + val4); } } }