1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
/* testcollection.vala
*
* Copyright (C) 2012 Maciej Piechotka
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
* This library 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
* Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Author:
* Maciej Piechotka <uzytkownik2@gmail.com>
*/
public class TestData {
private static string?[] ones = {null, "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
private static string[] tens = {null, null, "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
private static string hundred = "hundred";
private static string?[] thousands = {null, "thousand", "million", "billion", "trillion"};
private static uint data_size () {
return Test.quick() ? 128 : 1024;
}
private static uint DATA_SIZE = data_size ();
private const uint RND_IDX_SIZE = 8;
private static string[] data = create_data (DATA_SIZE);
private static string[] sorted_data = sort_array (data);
private static uint[] random_idx = draw_numbers(DATA_SIZE, RND_IDX_SIZE);
public static unowned string[] get_data () {
TypeClass klass = typeof (TestData).class_ref ();
klass.get_type ();
return data;
}
public static unowned string[] get_sorted_data () {
TypeClass klass = typeof (TestData).class_ref ();
klass.get_type ();
return sorted_data;
}
public static unowned uint[] get_drawn_numbers () {
TypeClass klass = typeof (TestData).class_ref ();
klass.get_type ();
return random_idx;
}
private static uint[] draw_numbers (uint n, uint k) {
uint[] result = new uint[n];
// Initialize array
for (uint i = 0; i < n; i++) {
result[i] = i;
}
// Fisher-Yates shuffle algorithm. Possibly not the most efficient implementation but oh well
for (uint i = n - 1; i >= 1; i--) {
int j = Test.rand_int_range (0, (int32)(i + 1));
uint tmp = result[i];
result[i] = result[j];
result[j] = tmp;
}
result.resize ((int)k);
return (owned)result;
}
private static string print3digit (uint n) {
string? h = (n >= 200) ? "%s %s".printf(ones[n / 100], hundred) : ((n >= 100) ? hundred : null);
n = n % 100;
unowned string? t = tens[n / 10];
n = (n >= ones.length) ? n % 10 : n;
unowned string? o = ones[n];
return "%s%s%s%s%s".printf(h != null ? h : "", h != null && (t != null || o != null) ? " " : "", t != null ? t : "", t != null && o != null ? "-" : "", o != null ? o : "");
}
private static string[] create_data (uint count) {
string[] numbers = new string[count];
for (uint idx = 0; idx < count; idx++) {
uint n = idx + 1;
string? num = null;
uint th = 0;
while (n != 0) {
if (n % 1000 != 0) {
string? t = thousands[th];
string c = print3digit (n % 1000);
num = "%s%s%s%s%s".printf(c, t != null ? " " : "", t != null ? t : "", num != null ? " " : "", num != null ? num : "");
}
n /= 1000;
th++;
}
if (num == null) {
num = "zero";
}
numbers[idx] = (owned)num;
}
return (owned)numbers;
}
private static string[] sort_array (owned string[] array) {
qsort_with_data<string> (array, sizeof(string), (a, b) => {return strcmp(a, b);});
return (owned)array;
}
}
|