diff options
| author | Rémi Verschelde | 2017-01-08 14:08:18 +0100 |
|---|---|---|
| committer | Rémi Verschelde | 2017-01-08 14:08:18 +0100 |
| commit | 790f629e5e1cccf721948b1153bb0dee139ac1a5 (patch) | |
| tree | ca19ab642e59d18918d1f86fae953fc979d7ca51 /bin/tests/test_math.cpp | |
| parent | 28d74862677f6d0d94fbfffb305750da41f77930 (diff) | |
| download | godot-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.cpp | 816 |
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; - -} - -} |
