Index: fmts/trunk/p/C0XTEST.m
===================================================================
--- fmts/trunk/p/C0XTEST.m	(revision 1280)
+++ fmts/trunk/p/C0XTEST.m	(revision 1280)
@@ -0,0 +1,125 @@
+C0XTEST ; GPL - Fileman Triples bulk load tester ;11/6/11  17:05
+ ;;0.1;C0X;nopatch;noreleasedate;Build 1
+ ;Copyright 2011 George Lilly.  Licensed under the terms of the GNU
+ ;General Public License See attached copy of the License.
+ ;
+ ;This program is free software; you can redistribute it and/or modify
+ ;it under the terms of the GNU General Public License as published by
+ ;the Free Software Foundation; either version 2 of the License, or
+ ;(at your option) any later version.
+ ;
+ ;This program is distributed in the hope that it will be useful,
+ ;but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ ;GNU General Public License for more details.
+ ;
+ ;You should have received a copy of the GNU General Public License along
+ ;with this program; if not, write to the Free Software Foundation, Inc.,
+ ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ ;
+ Q
+ ;
+EN ; run the test
+ ;
+ k C0XFDA ; clear the node variable
+ i '$d(^C0X(101,0)) d  ; global doesn't exist
+ . s ^C0X(101,0)="C0X TRIPLE^172.101^1^1"
+ n zg
+ S zg="_:G"_$$LKY9 ; all nodes are in the same graph
+ n zi
+ f zi=1:1:10000 d  ; try a test of 10000 nodes
+ . s C0XFDA(172.101,zi,.01)="N"_$$LKY17 ; node name
+ . s C0XFDA(172.101,zi,.02)=zg
+ . s C0XFDA(172.101,zi,.03)=$R(100000)
+ . s C0XFDA(172.101,zi,.04)=$R(100000)
+ . s C0XFDA(172.101,zi,.05)=$R(100000)
+ S C0XST=$$NOW^XLFDT ; start of the insertion test
+ W !,"INSERTION STARTS AT ",C0XST,!
+ d BULKLOAD(.C0XFDA)
+ s C0XEND=$$NOW^XLFDT ; end of the insertion test
+ W !,"INSERTION ENDS AT ",C0XEND
+ S C0XDIFF=$$FMDIFF^XLFDT(C0XEND,C0XST,2)
+ W !," ELAPSED TIME: ",C0XDIFF," SECONDS"
+ W !," APPROXIMATELY ",$P(10000/C0XDIFF,".")," NODES PER SECOND"
+ q
+ ;
+LKY9() ;EXTRINIC THAT RETURNS A RANDOM 9 DIGIT NUMBER. USED FOR GENERATING
+ ; UNIQUE NODE AND GRAPH NAMES
+ N ZN,ZI
+ S ZN=""
+ F ZI=1:1:9 D  ;
+ . S ZN=ZN_$R(10)
+ Q ZN
+ ;
+LKY17() ;EXTRINIC THAT RETURNS A RANDOM 9 DIGIT NUMBER. USED FOR GENERATING
+ ; UNIQUE NODE AND GRAPH NAMES
+ N ZN,ZI
+ S ZN=""
+ F ZI=1:1:17 D  ;
+ . S ZN=ZN_$R(10)
+ Q ZN
+ ;
+BULKLOAD(ZBFDA) ; BULK LOADER FOR LOADING TRIPLES INTO FILE 172.101
+ ; USING GLOBAL SETS INSTEAD OF UPDATE^DIE
+ ; QUITS IF FILE IS NOT 172.101
+ ; EXPECTS AN FDA WITHOUT STRINGS FOR THE IENS, STARTING AT 1
+ ; QUITS IF FIRST ENTRY IS NOT IENS 1
+ ; ASSUMES THAT THE LAST IENS IS THE COUNT OF ENTRIES
+ ; ZBFDA IS PASSED BY REFERENCE
+ ;
+ ; -- reserves a block of iens from file 172.101 by locking the zero node
+ ; -- ^C0X(101,0) and adding the count of entries to piece 2 and 3
+ ; -- then unlocking to minimize the duration of the lock
+ ;
+ W !,"USING BULKLOAD"
+ I '$D(ZBFDA) Q  ; EMPTY FDA
+ I $O(ZBFDA(""))'=172.101 Q  ; WRONG FILE
+ N ZCNT,ZP3,ZP4
+ ; -- find the number of nodes to insert
+ S ZCNT=$O(ZBFDA(172.101,""),-1)
+ I ZCNT="" D  Q  ;
+ . W !,"ERROR IN BULK LOAD - INVALID NODE COUNT"
+ . B
+ ; -- lock the zero node and reserve a block of iens to insert
+ W !,"LOCKING ZERO NODE"
+ LOCK +^C0X(101,0)
+ S ZP3=$P(^C0X(101,0),U,3)
+ S ZP4=$P(^C0X(101,0),U,4)
+ S $P(^C0X(101,0),U,3)=ZP3+ZCNT+1
+ S $P(^C0X(101,0),U,4)=ZP4+ZCNT+1
+ LOCK -^C0X(101,0)
+ N ZI,ZN,ZG,ZS,ZP,ZO,ZIEN,ZBASE
+ S ZBASE=ZP3 ; the last ien in the file
+ W !,"ZERO NODE UNLOCKED, IENS RESERVED=",ZCNT
+ W !,$$NOW^XLFDT
+ S ZI=""
+ F  S ZI=$O(ZBFDA(172.101,ZI)) Q:ZI=""  D  ;
+ . S ZN=$G(ZBFDA(172.101,ZI,.01)) ; node name
+ . I ZN="" D BLKERR Q  ; 
+ . S ZG=$G(ZBFDA(172.101,ZI,.02)) ; graph pointer
+ . I ZG="" D BLKERR Q  ; 
+ . S ZS=$G(ZBFDA(172.101,ZI,.03)) ; subject pointer
+ . I ZS="" D BLKERR Q  ; 
+ . S ZP=$G(ZBFDA(172.101,ZI,.04)) ; predicate pointer
+ . I ZP="" D BLKERR Q  ; 
+ . S ZO=$G(ZBFDA(172.101,ZI,.05)) ; object pointer
+ . I ZO="" D BLKERR Q  ; 
+ . S ZIEN=ZI+ZBASE ; the new ien
+ . S ^C0X(101,ZIEN,0)=ZN_U_ZG_U_ZS_U_ZP_U_ZO ; set the zero node
+ . S ^C0X(101,"B",ZN,ZIEN)="" ; the B index
+ . S ^C0X(101,"G",ZG,ZIEN)="" ; the G for Graph index
+ . S ^C0X(101,"SPO",ZS,ZP,ZO)=""
+ . S ^C0X(101,"SOP",ZS,ZO,ZP)=""
+ . S ^C0X(101,"OPS",ZO,ZP,ZS)=""
+ . S ^C0X(101,"OSP",ZO,ZS,ZP)=""
+ . S ^C0X(101,"GOPS",ZG,ZO,ZP,ZS)=""
+ . S ^C0X(101,"GOSP",ZG,ZO,ZS,ZP)=""
+ . S ^C0X(101,"GPSO",ZG,ZP,ZS,ZO)=""
+ . S ^C0X(101,"GSPO",ZG,ZS,ZP,ZO)=""
+ Q
+ ;
+BLKERR ; 
+ W !,"ERROR IN BULK LOAD",! ZWR ZBFDA(ZI)
+ B
+ Q
+ ;
