aboutsummaryrefslogtreecommitdiff
path: root/bin/tests/test_math.cpp
diff options
context:
space:
mode:
authorRémi Verschelde2017-01-08 14:08:18 +0100
committerRémi Verschelde2017-01-08 14:08:18 +0100
commit790f629e5e1cccf721948b1153bb0dee139ac1a5 (patch)
treeca19ab642e59d18918d1f86fae953fc979d7ca51 /bin/tests/test_math.cpp
parent28d74862677f6d0d94fbfffb305750da41f77930 (diff)
downloadgodot-790f629e5e1cccf721948b1153bb0dee139ac1a5.tar.gz
godot-790f629e5e1cccf721948b1153bb0dee139ac1a5.tar.zst
godot-790f629e5e1cccf721948b1153bb0dee139ac1a5.zip
Diffstat (limited to 'bin/tests/test_math.cpp')
-rw-r--r--bin/tests/test_math.cpp816
1 files changed, 0 insertions, 816 deletions
diff --git a/bin/tests/test_math.cpp b/bin/tests/test_math.cpp
deleted file mode 100644
index b3b70986c..000000000
--- a/bin/tests/test_math.cpp
+++ /dev/null
@@ -1,816 +0,0 @@
-/*************************************************************************/
-/* test_math.cpp */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* http://www.godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
-/* */
-/* Permission is hereby granted, free of charge, to any person obtaining */
-/* a copy of this software and associated documentation files (the */
-/* "Software"), to deal in the Software without restriction, including */
-/* without limitation the rights to use, copy, modify, merge, publish, */
-/* distribute, sublicense, and/or sell copies of the Software, and to */
-/* permit persons to whom the Software is furnished to do so, subject to */
-/* the following conditions: */
-/* */
-/* The above copyright notice and this permission notice shall be */
-/* included in all copies or substantial portions of the Software. */
-/* */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
-/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
-/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
-/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-#include "test_math.h"
-#include "ustring.h"
-#include "print_string.h"
-#include "transform.h"
-#include "matrix3.h"
-#include "math_funcs.h"
-#include "camera_matrix.h"
-#include "scene/main/node.h"
-#include "variant.h"
-#include "servers/visual/shader_language.h"
-#include "os/keyboard.h"
-#include "scene/resources/texture.h"
-#include "vmap.h"
-#include "os/os.h"
-#include "os/file_access.h"
-
-#include "method_ptrcall.h"
-
-namespace TestMath {
-
-
-class GetClassAndNamespace {
-
- String code;
- int idx;
- int line;
- String error_str;
- bool error;
- Variant value;
-
- String class_name;
-
- enum Token {
- TK_BRACKET_OPEN,
- TK_BRACKET_CLOSE,
- TK_CURLY_BRACKET_OPEN,
- TK_CURLY_BRACKET_CLOSE,
- TK_PERIOD,
- TK_COLON,
- TK_COMMA,
- TK_SYMBOL,
- TK_IDENTIFIER,
- TK_STRING,
- TK_NUMBER,
- TK_EOF,
- TK_ERROR
- };
-
-
- Token get_token() {
-
- while (true) {
- switch(code[idx]) {
-
- case '\n': {
-
- line++;
- idx++;
- break;
- };
- case 0: {
- return TK_EOF;
-
- } break;
- case '{': {
-
- idx++;
- return TK_CURLY_BRACKET_OPEN;
- };
- case '}': {
-
- idx++;
- return TK_CURLY_BRACKET_CLOSE;
- };
- case '[': {
-
- idx++;
- return TK_BRACKET_OPEN;
- };
- case ']': {
-
- idx++;
- return TK_BRACKET_CLOSE;
- };
- case ':': {
-
- idx++;
- return TK_COLON;
- };
- case ',': {
-
- idx++;
- return TK_COMMA;
- };
- case '.': {
-
- idx++;
- return TK_PERIOD;
- };
- case '#': {
- //compiler directive
- while(code[idx]!='\n' && code[idx]!=0) {
- idx++;
- }
- continue;
- } break;
- case '/': {
-
-
- switch(code[idx+1]) {
- case '*': { // block comment
-
- idx+=2;
- while(true) {
- if (code[idx]==0) {
- error_str="Unterminated comment";
- error=true;
- return TK_ERROR;
- } if (code[idx]=='*' &&code[idx+1]=='/') {
-
- idx+=2;
- break;
- } if (code[idx]=='\n') {
- line++;
- }
-
- idx++;
- }
-
- } break;
- case '/': { // line comment skip
-
- while(code[idx]!='\n' && code[idx]!=0) {
- idx++;
- }
-
- } break;
- default: {
- value="/";
- idx++;
- return TK_SYMBOL;
- }
-
- }
-
- continue; // a comment
- } break;
- case '\'':
- case '"': {
-
- CharType begin_str = code[idx];
- idx++;
- String tk_string=String();
- while(true) {
- if (code[idx]==0) {
- error_str="Unterminated String";
- error=true;
- return TK_ERROR;
- } else if (code[idx]==begin_str) {
- idx++;
- break;
- } else if (code[idx]=='\\') {
- //escaped characters...
- idx++;
- CharType next = code[idx];
- if (next==0) {
- error_str="Unterminated String";
- error=true;
- return TK_ERROR;
- }
- CharType res=0;
-
- switch(next) {
-
- case 'b': res=8; break;
- case 't': res=9; break;
- case 'n': res=10; break;
- case 'f': res=12; break;
- case 'r': res=13; break;
- /* too much, not needed for now
- case 'u': {
- //hexnumbarh - oct is deprecated
-
-
- for(int j=0;j<4;j++) {
- CharType c = code[idx+j+1];
- if (c==0) {
- r_err_str="Unterminated String";
- return ERR_PARSE_ERROR;
- }
- if (!((c>='0' && c<='9') || (c>='a' && c<='f') || (c>='A' && c<='F'))) {
-
- r_err_str="Malformed hex constant in string";
- return ERR_PARSE_ERROR;
- }
- CharType v;
- if (c>='0' && c<='9') {
- v=c-'0';
- } else if (c>='a' && c<='f') {
- v=c-'a';
- v+=10;
- } else if (c>='A' && c<='F') {
- v=c-'A';
- v+=10;
- } else {
- ERR_PRINT("BUG");
- v=0;
- }
-
- res<<=4;
- res|=v;
-
-
- }
- idx+=4; //will add at the end anyway
-
-
- } break;*/
- case '\"': res='\"'; break;
- case '\\': res='\\'; break;
- //case '/': res='/'; break;
- default: {
- res = next;
- //r_err_str="Invalid escape sequence";
- //return ERR_PARSE_ERROR;
- } break;
- }
-
- tk_string+=res;
-
- } else {
- if (code[idx]=='\n')
- line++;
- tk_string+=code[idx];
- }
- idx++;
- }
-
- value=tk_string;
-
- return TK_STRING;
-
- } break;
- default: {
-
- if (code[idx]<=32) {
- idx++;
- break;
- }
-
- if ( (code[idx]>=33 && code[idx]<=47) || (code[idx]>=58 && code[idx]<=64) || (code[idx]>=91 && code[idx]<=96) || (code[idx]>=123 && code[idx]<=127)){
- value=String::chr(code[idx]);
- idx++;
- return TK_SYMBOL;
- }
-
- if (code[idx]=='-' || (code[idx]>='0' && code[idx]<='9')) {
- //a number
- const CharType *rptr;
- double number = String::to_double(&code[idx],&rptr);
- idx+=(rptr - &code[idx]);
- value=number;
- return TK_NUMBER;
-
- } else if ((code[idx]>='A' && code[idx]<='Z') || (code[idx]>='a' && code[idx]<='z') || code[idx]>127) {
-
- String id;
-
- while((code[idx]>='A' && code[idx]<='Z') || (code[idx]>='a' && code[idx]<='z') || code[idx]>127) {
-
- id+=code[idx];
- idx++;
- }
-
- value=id;
- return TK_IDENTIFIER;
- } else {
- error_str="Unexpected character.";
- error=true;
- return TK_ERROR;
- }
- }
-
- }
- }
- }
-
-public:
- Error parse(const String& p_code,const String& p_known_class_name=String()) {
-
- code=p_code;
- idx=0;
- line=0;
- error_str=String();
- error=false;
- value=Variant();
- class_name=String();
-
- bool use_next_class=false;
- Token tk = get_token();
-
- Map<int,String> namespace_stack;
- int curly_stack=0;
-
-
- while(!error || tk!=TK_EOF) {
-
- if (tk==TK_BRACKET_OPEN) {
- tk = get_token();
- if (tk==TK_IDENTIFIER && String(value)=="ScriptClass") {
- if (get_token()==TK_BRACKET_CLOSE) {
- use_next_class=true;
- }
- }
- } else if (tk==TK_IDENTIFIER && String(value)=="class") {
- tk = get_token();
- if (tk==TK_IDENTIFIER) {
- String name = value;
- if (use_next_class || p_known_class_name==name) {
- for (Map<int,String>::Element *E=namespace_stack.front();E;E=E->next()) {
- class_name+=E->get()+".";
- }
- class_name+=String(value);
- break;
- }
- }
-
- } else if (tk==TK_IDENTIFIER && String(value)=="namespace") {
- String name;
- int at_level = curly_stack;
- while(true) {
- tk = get_token();
- if (tk==TK_IDENTIFIER) {
- name+=String(value);
- }
-
- tk = get_token();
- if (tk==TK_PERIOD) {
- name+=".";
- } else if (tk==TK_CURLY_BRACKET_OPEN) {
- curly_stack++;
- break;
- } else {
- break; //whathever else
- }
-
- }
-
- if (name!=String()) {
- namespace_stack[at_level]=name;
- }
-
- } else if (tk==TK_CURLY_BRACKET_OPEN) {
- curly_stack++;
- } else if (tk==TK_CURLY_BRACKET_CLOSE) {
- curly_stack--;
- if (namespace_stack.has(curly_stack)) {
- namespace_stack.erase(curly_stack);
- }
- }
-
- tk = get_token();
- }
-
- if (error)
- return ERR_PARSE_ERROR;
-
-
-
- return OK;
-
- }
-
- String get_error() {
- return error_str;
- }
-
- String get_class() {
- return class_name;
- }
-
-};
-
-
-void test_vec(Plane p_vec) {
-
-
- CameraMatrix cm;
- cm.set_perspective(45,1,0,100);
- Plane v0=cm.xform4(p_vec);
-
- print_line("out: "+v0);
- v0.normal.z = (v0.d/100.0 *2.0-1.0) * v0.d;
- print_line("out_F: "+v0);
-
-
-/*v0: 0, 0, -0.1, 0.1
-v1: 0, 0, 0, 0.1
-fix: 0, 0, 0, 0.1
-v0: 0, 0, 1.302803, 1.5
-v1: 0, 0, 1.401401, 1.5
-fix: 0, 0, 1.401401, 1.5
-v0: 0, 0, 25.851850, 26
-v1: 0, 0, 25.925926, 26
-fix: 0, 0, 25.925924, 26
-v0: 0, 0, 49.899902, 50
-v1: 0, 0, 49.949947, 50
-fix: 0, 0, 49.949951, 50
-v0: 0, 0, 100, 100
-v1: 0, 0, 100, 100
-fix: 0, 0, 100, 100
-*/
-
-
-}
-
-uint32_t ihash( uint32_t a)
-{
- a = (a+0x7ed55d16) + (a<<12);
- a = (a^0xc761c23c) ^ (a>>19);
- a = (a+0x165667b1) + (a<<5);
- a = (a+0xd3a2646c) ^ (a<<9);
- a = (a+0xfd7046c5) + (a<<3);
- a = (a^0xb55a4f09) ^ (a>>16);
- return a;
-}
-
-uint32_t ihash2( uint32_t a) {
- a = (a ^ 61) ^ (a >> 16);
- a = a + (a << 3);
- a = a ^ (a >> 4);
- a = a * 0x27d4eb2d;
- a = a ^ (a >> 15);
- return a;
-}
-
-uint32_t ihash3( uint32_t a)
-{
- a = (a+0x479ab41d) + (a<<8);
- a = (a^0xe4aa10ce) ^ (a>>5);
- a = (a+0x9942f0a6) - (a<<14);
- a = (a^0x5aedd67d) ^ (a>>3);
- a = (a+0x17bea992) + (a<<7);
- return a;
-}
-
-
-
-
-MainLoop* test() {
-
-
- print_line("Dvectors: "+itos(MemoryPool::allocs_used));
- print_line("Mem used: "+itos(MemoryPool::total_memory));
- print_line("MAx mem used: "+itos(MemoryPool::max_memory));
-
- PoolVector<int> ints;
- ints.resize(20);
-
- {
- PoolVector<int>::Write w;
- w = ints.write();
- for(int i=0;i<ints.size();i++) {
- w[i]=i;
- }
- }
-
- PoolVector<int> posho = ints;
-
- {
- PoolVector<int>::Read r = posho.read();
- for(int i=0;i<posho.size();i++) {
- print_line(itos(i)+" : " +itos(r[i]));
- }
- }
-
- print_line("later Dvectors: "+itos(MemoryPool::allocs_used));
- print_line("later Mem used: "+itos(MemoryPool::total_memory));
- print_line("Mlater Ax mem used: "+itos(MemoryPool::max_memory));
-
-
- return NULL;
-
- List<String> cmdlargs = OS::get_singleton()->get_cmdline_args();
-
- if (cmdlargs.empty()) {
- //try editor!
- return NULL;
- }
-
- String test = cmdlargs.back()->get();
-
- FileAccess *fa = FileAccess::open(test,FileAccess::READ);
-
- if (!fa) {
- ERR_EXPLAIN("Could not open file: "+test);
- ERR_FAIL_V(NULL);
- }
-
-
- Vector<uint8_t> buf;
- int flen = fa->get_len();
- buf.resize(fa->get_len()+1);
- fa->get_buffer(&buf[0],flen);
- buf[flen]=0;
-
-
- String code;
- code.parse_utf8((const char*)&buf[0]);
-
- GetClassAndNamespace getclass;
- if (getclass.parse(code)) {
- print_line("Parse error: "+getclass.get_error());
- } else {
- print_line("Found class: "+getclass.get_class());
- }
-
- return NULL;
-
- {
-
- Vector<int> hashes;
- List<StringName> tl;
- ClassDB::get_class_list(&tl);
-
-
- for (List<StringName>::Element *E=tl.front();E;E=E->next()) {
-
- Vector<uint8_t> m5b = E->get().operator String().md5_buffer();
- hashes.push_back(hashes.size());
-
- }
-
- //hashes.resize(50);
-
- for(int i=nearest_shift(hashes.size());i<20;i++) {
-
- bool success=true;
- for(int s=0;s<10000;s++) {
- Set<uint32_t> existing;
- success=true;
-
- for(int j=0;j<hashes.size();j++) {
-
- uint32_t eh = ihash2(ihash3(hashes[j]+ihash(s)+s))&((1<<i)-1);
- if (existing.has(eh)) {
- success=false;
- break;
- }
- existing.insert(eh);
- }
-
- if (success) {
- print_line("success at "+itos(i)+"/"+itos(nearest_shift(hashes.size()))+" shift "+itos(s));
- break;
- }
- }
- if (success)
- break;
- }
-
- print_line("DONE");
-
-
-
- return NULL;
- }
- {
-
-
- // print_line("NUM: "+itos(237641278346127));
- print_line("NUM: "+itos(-128));
- return NULL;
-
- }
-
-
- {
- Vector3 v(1,2,3);
- v.normalize();
- float a=0.3;
-
- //Quat q(v,a);
- Matrix3 m(v,a);
-
- Vector3 v2(7,3,1);
- v2.normalize();
- float a2=0.8;
-
- //Quat q(v,a);
- Matrix3 m2(v2,a2);
-
- Quat q=m;
- Quat q2=m2;
-
- Matrix3 m3 = m.inverse() * m2;
- Quat q3 = (q.inverse() * q2);//.normalized();
-
- print_line(Quat(m3));
- print_line(q3);
-
- print_line("before v: "+v+" a: "+rtos(a));
- q.get_axis_and_angle(v,a);
- print_line("after v: "+v+" a: "+rtos(a));
- }
-
- return NULL;
- String ret;
-
- List<String> args;
- args.push_back("-l");
- Error err = OS::get_singleton()->execute("/bin/ls",args,true,NULL,&ret);
- print_line("error: "+itos(err));
- print_line(ret);
-
- return NULL;
- Matrix3 m3;
- m3.rotate(Vector3(1,0,0),0.2);
- m3.rotate(Vector3(0,1,0),1.77);
- m3.rotate(Vector3(0,0,1),212);
- Matrix3 m32;
- m32.set_euler(m3.get_euler());
- print_line("ELEULEEEEEEEEEEEEEEEEEER: "+m3.get_euler()+" vs "+m32.get_euler());
-
-
- return NULL;
-
- {
-
- Dictionary d;
- d["momo"]=1;
- Dictionary b=d;
- b["44"]=4;
- }
-
-
-
- return NULL;
- print_line("inters: "+rtos(Geometry::segment_intersects_circle(Vector2(-5,0),Vector2(-2,0),Vector2(),1.0)));
-
-
-
- print_line("cross: "+Vector3(1,2,3).cross(Vector3(4,5,7)));
- print_line("dot: "+rtos(Vector3(1,2,3).dot(Vector3(4,5,7))));
- print_line("abs: "+Vector3(-1,2,-3).abs());
- print_line("distance_to: "+rtos(Vector3(1,2,3).distance_to(Vector3(4,5,7))));
- print_line("distance_squared_to: "+rtos(Vector3(1,2,3).distance_squared_to(Vector3(4,5,7))));
- print_line("plus: "+(Vector3(1,2,3)+Vector3(Vector3(4,5,7))));
- print_line("minus: "+(Vector3(1,2,3)-Vector3(Vector3(4,5,7))));
- print_line("mul: "+(Vector3(1,2,3)*Vector3(Vector3(4,5,7))));
- print_line("div: "+(Vector3(1,2,3)/Vector3(Vector3(4,5,7))));
- print_line("mul scalar: "+(Vector3(1,2,3)*2));
- print_line("premul scalar: "+(2*Vector3(1,2,3)));
- print_line("div scalar: "+(Vector3(1,2,3)/3.0));
- print_line("length: "+rtos(Vector3(1,2,3).length()));
- print_line("length squared: "+rtos(Vector3(1,2,3).length_squared()));
- print_line("normalized: "+Vector3(1,2,3).normalized());
- print_line("inverse: "+Vector3(1,2,3).inverse());
-
- {
- Vector3 v(4,5,7);
- v.normalize();
- print_line("normalize: "+v);
- }
-
- {
- Vector3 v(4,5,7);
- v+=Vector3(1,2,3);
- print_line("+=: "+v);
- }
-
- {
- Vector3 v(4,5,7);
- v-=Vector3(1,2,3);
- print_line("-=: "+v);
- }
-
- {
- Vector3 v(4,5,7);
- v*=Vector3(1,2,3);
- print_line("*=: "+v);
- }
-
- {
- Vector3 v(4,5,7);
- v/=Vector3(1,2,3);
- print_line("/=: "+v);
- }
-
- {
- Vector3 v(4,5,7);
- v*=2.0;
- print_line("scalar *=: "+v);
- }
-
- {
- Vector3 v(4,5,7);
- v/=2.0;
- print_line("scalar /=: "+v);
- }
-
-
-
-#if 0
- print_line(String("C:\\momo\\.\\popo\\..\\gongo").simplify_path());
- print_line(String("res://../popo/..//gongo").simplify_path());
- print_line(String("res://..").simplify_path());
-
-
- PoolVector<uint8_t> a;
- PoolVector<uint8_t> b;
-
- a.resize(20);
- b=a;
- b.resize(30);
- a=b;
-#endif
-
-#if 0
- String za = String::utf8("á");
- printf("unicode: %x\n",za[0]);
- CharString cs=za.utf8();
- for(int i=0;i<cs.size();i++) {
- uint32_t v = uint8_t(cs[i]);
- printf("%i - %x\n",i,v);
- }
- return NULL;
-
- print_line(String("C:\\window\\system\\momo").path_to("C:\\window\\momonga"));
- print_line(String("res://momo/sampler").path_to("res://pindonga"));
- print_line(String("/margarito/terere").path_to("/margarito/pilates"));
- print_line(String("/algo").path_to("/algo"));
- print_line(String("c:").path_to("c:\\"));
- print_line(String("/").path_to("/"));
-
-
- print_line(itos(sizeof(Variant)));
- return NULL;
-
- Vector<StringName> path;
- path.push_back("three");
- path.push_back("two");
- path.push_back("one");
- path.push_back("comeon");
- path.revert();
-
- NodePath np(path,true);
-
- print_line(np);
-
-
- return NULL;
-
- bool a=2;
-
- print_line(Variant(a));
-
-
- Matrix32 mat2_1;
- mat2_1.rotate(0.5);
- Matrix32 mat2_2;
- mat2_2.translate(Vector2(1,2));
- Matrix32 mat2_3 = mat2_1 * mat2_2;
- mat2_3.affine_invert();
-
- print_line(mat2_3.elements[0]);
- print_line(mat2_3.elements[1]);
- print_line(mat2_3.elements[2]);
-
-
-
- Transform mat3_1;
- mat3_1.basis.rotate(Vector3(0,0,1),0.5);
- Transform mat3_2;
- mat3_2.translate(Vector3(1,2,0));
- Transform mat3_3 = mat3_1 * mat3_2;
- mat3_3.affine_invert();
-
- print_line(mat3_3.basis.get_axis(0));
- print_line(mat3_3.basis.get_axis(1));
- print_line(mat3_3.origin);
-
-#endif
- return NULL;
-
-}
-
-}