KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > db4o > db4ounit > common > assorted > LongLinkedListTestCase


1 /* Copyright (C) 2004 - 2006 db4objects Inc. http://www.db4o.com
2
3 This file is part of the db4o open source object database.
4
5 db4o is free software; you can redistribute it and/or modify it under
6 the terms of version 2 of the GNU General Public License as published
7 by the Free Software Foundation and as clarified by db4objects' GPL
8 interpretation policy, available at
9 http://www.db4o.com/about/company/legalpolicies/gplinterpretation/
10 Alternatively you can write to db4objects, Inc., 1900 S Norfolk Street,
11 Suite 350, San Mateo, CA 94403, USA.
12
13 db4o is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License along
19 with this program; if not, write to the Free Software Foundation, Inc.,
20 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */

21 package com.db4o.db4ounit.common.assorted;
22
23 import com.db4o.ObjectSet;
24 import com.db4o.query.Query;
25
26 import db4ounit.Assert;
27 import db4ounit.extensions.AbstractDb4oTestCase;
28
29
30 public class LongLinkedListTestCase extends AbstractDb4oTestCase{
31     
32     private static final int COUNT = 1000;
33     
34     public static class LinkedList{
35         
36         public LinkedList _next;
37         
38         public int _depth;
39         
40     }
41
42     private static LinkedList newLongCircularList(){
43         LinkedList head = new LinkedList();
44         LinkedList tail = head;
45         for (int i = 1; i < COUNT; i++) {
46             tail._next = new LinkedList();
47             tail = tail._next;
48             tail._depth = i;
49         }
50         tail._next = head;
51         return head;
52     }
53     
54     public static void main(String JavaDoc[] args) throws Exception JavaDoc {
55         new LongLinkedListTestCase().runSolo();
56     }
57     
58     protected void store() throws Exception JavaDoc {
59         store(newLongCircularList());
60     }
61     
62     public void test(){
63         Query q = newQuery(LinkedList.class);
64         q.descend("_depth").constrain(new Integer JavaDoc(0));
65         ObjectSet objectSet = q.execute();
66         Assert.areEqual(1, objectSet.size());
67         LinkedList head = (LinkedList) objectSet.next();
68         db().activate(head, Integer.MAX_VALUE);
69         assertListIsComplete(head);
70         db().deactivate(head, Integer.MAX_VALUE);
71         db().activate(head, Integer.MAX_VALUE);
72         assertListIsComplete(head);
73         db().deactivate(head, Integer.MAX_VALUE);
74         db().refresh(head, Integer.MAX_VALUE);
75         assertListIsComplete(head);
76         
77 // TODO: The following produces a stack overflow. That's OK for now, peekPersisted is rarely
78
// used and users can control behaviour with the depth parameter.
79
//
80
// LinkedList peeked = (LinkedList) db().ext().peekPersisted(head, Integer.MAX_VALUE, true);
81
// assertListIsComplete(peeked);
82

83     }
84     
85     private void assertListIsComplete(LinkedList head){
86         int count = 1;
87         LinkedList tail = head._next;
88         while (tail != head){
89             count++;
90             tail = tail._next;
91         }
92         Assert.areEqual(COUNT, count);
93     }
94
95 }
96
Popular Tags