1 /* =============================================================================
4 * -- Create random gene
6 * =============================================================================
8 * Copyright (C) Stanford University, 2006. All Rights Reserved.
11 * =============================================================================
13 * For the license of bayes/sort.h and bayes/sort.c, please see the header
16 * ------------------------------------------------------------------------
18 * For the license of kmeans, please see kmeans/LICENSE.kmeans
20 * ------------------------------------------------------------------------
22 * For the license of ssca2, please see ssca2/COPYRIGHT
24 * ------------------------------------------------------------------------
26 * For the license of lib/mt19937ar.c and lib/mt19937ar.h, please see the
27 * header of the files.
29 * ------------------------------------------------------------------------
31 * For the license of lib/rbtree.h and lib/rbtree.c, please see
32 * lib/LEGALNOTICE.rbtree and lib/LICENSE.rbtree
34 * ------------------------------------------------------------------------
36 * Unless otherwise noted, the following license applies to STAMP files:
38 * Copyright (c) 2007, Stanford University
39 * All rights reserved.
41 * Redistribution and use in source and binary forms, with or without
42 * modification, are permitted provided that the following conditions are
45 * * Redistributions of source code must retain the above copyright
46 * notice, this list of conditions and the following disclaimer.
48 * * Redistributions in binary form must reproduce the above copyright
49 * notice, this list of conditions and the following disclaimer in
50 * the documentation and/or other materials provided with the
53 * * Neither the name of Stanford University nor the names of its
54 * contributors may be used to endorse or promote products derived
55 * from this software without specific prior written permission.
57 * THIS SOFTWARE IS PROVIDED BY STANFORD UNIVERSITY ``AS IS'' AND ANY
58 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
59 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
60 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE
61 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
62 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
63 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
64 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
65 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
66 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
67 * THE POSSIBILITY OF SUCH DAMAGE.
69 * =============================================================================
76 #include "nucleotide.h"
81 /* =============================================================================
83 * -- Does all memory allocation necessary for gene creation
84 * -- Returns NULL on failure
85 * =============================================================================
88 gene_alloc (long length)
94 genePtr = (gene_t*)malloc(sizeof(gene_t));
95 if (genePtr == NULL) {
99 genePtr->contents = (char*)malloc((length + 1) * sizeof(char));
100 if (genePtr->contents == NULL) {
103 genePtr->contents[length] = '\0';
104 genePtr->length = length;
106 genePtr->startBitmapPtr = bitmap_alloc(length);
107 if (genePtr->startBitmapPtr == NULL) {
115 /* =============================================================================
117 * -- Populate contents with random gene
118 * =============================================================================
121 gene_create (gene_t* genePtr, random_t* randomPtr)
126 const char nucleotides[] = {
133 assert(genePtr != NULL);
134 assert(randomPtr != NULL);
136 length = genePtr->length;
137 contents = genePtr->contents;
139 for (i = 0; i < length; i++) {
141 nucleotides[(random_generate(randomPtr)% NUCLEOTIDE_NUM_TYPE)];
146 /* =============================================================================
148 * =============================================================================
151 gene_free (gene_t* genePtr)
153 bitmap_free(genePtr->startBitmapPtr);
154 free(genePtr->contents);
159 /* =============================================================================
161 * =============================================================================
179 bool_t status = memory_init(1, 4, 2);
184 gene1Ptr = gene_alloc(10);
185 gene2Ptr = gene_alloc(10);
186 gene3Ptr = gene_alloc(9);
187 randomPtr = random_alloc();
189 random_seed(randomPtr, 0);
190 gene_create(gene1Ptr, randomPtr);
191 random_seed(randomPtr, 1);
192 gene_create(gene2Ptr, randomPtr);
193 random_seed(randomPtr, 0);
194 gene_create(gene3Ptr, randomPtr);
196 assert(gene1Ptr->length == strlen(gene1Ptr->contents));
197 assert(gene2Ptr->length == strlen(gene2Ptr->contents));
198 assert(gene3Ptr->length == strlen(gene3Ptr->contents));
200 assert(gene1Ptr->length == gene2Ptr->length);
201 assert(strcmp(gene1Ptr->contents, gene2Ptr->contents) != 0);
203 assert(gene1Ptr->length == (gene3Ptr->length + 1));
204 assert(strcmp(gene1Ptr->contents, gene3Ptr->contents) != 0);
205 assert(strncmp(gene1Ptr->contents,
207 gene3Ptr->length) == 0);
212 random_free(randomPtr);
214 puts("All tests passed.");
220 #endif /* TEST_GENE */
223 /* =============================================================================
227 * =============================================================================